PHP第十六课:PHP的Cookie和Session
PHP的Cookie和Session
会话控制
也就是,有一个用户在浏览器中,打开网站的一个页面,那么浏览器就会向服务器请求数据 当服务器返回的数据在浏览器中显示完成后,该用户电脑就和服务器中断了连接(web方式,无状态) 之后,当这个用户次再刷新页面,让浏览器重新向服务器请求时,此时:服务器是否能知道,这次的请求用户,是上一次的那个用户?
若不能:
客户输入用户名和密码,并登陆成功。之后刷新页面,服务器还会要你再次登陆?不合理 。客户做一个将商品加入购物车的操作时,服务器不知道这个商品应该加入谁的购物车?不合理
若能:
则使用会话控制实现:session/cookie
当客户通过浏览器访问网站,服务器得到请求时,首先产生一个标志号:session_id,这个号在一段时间内,对于每个客户是唯一不同名的。 然后,服务器把这个标志号保存在硬盘上。之后,当服务器返回数据时,会把这个标志号传给浏览器,同时给浏览器一个命令,请浏览器在客户电脑硬盘上也记住一个标志号:session_id。 通常是产生一个文件。把标志号保存在文件里面(键名默认为:PHPSESSID)。这个文件又叫cookie文件。
SESSION流程
$_SESSION(Session 变量)
Session储存于服务端(默认以文件形式存储session),根据客户端提供的Session ID来得到用户的文件,取得变量的值,Session ID可以通过客户端的Cookie或者访问者的URL的附加数据来传送给服务器,然后服务器读Session的内容。
1)session是会话控制
2)session会话控制的开启,
(1)是通过:session_start();完成的
(2)session_start(); 该代码之前,不能有任何实际字符的输出,但可以存在header()函数的头信息输出
(3)session_start();若执行了
则:服务端自动产生一个标志号,叫:session_id。
好像手机号一样。是为了识别你是谁
<?ph
//会话控制开启 开启前,不能有任何实际字符的输出
session_start();
echo session_id(); //开启后,服务端自动产生一个session_id
?>
3)session_id,需要保存在服务端的“通讯录里面”
当前环境下,是保存在:d:\wamp\tmp
4)那我若再刷新一次页面,是不是也会产生一个新的session_id?
不会:因为,若你访问的第1次,服务端产生过session_id,session_id不仅会以一个文件名的形式,保存在服务器上,还会把session_id,发送给浏览器,让浏览器保存在:客户电脑上。你再刷新页面,第2次访问时,则浏览器会自动将session_id,提交给服务器服务端,发现你第2次访问时,携带了session_id,并且是有效的,则不再会产生的新的session_id
所以在1段时间内,你会拥有一个服务器提供给你的session_id,且不会改变。这样,在1段时间内,每个来访人,都拥有一个和被别人不重复的session_id,服务器就能区别每个人。
(1)$_SESSION是数组,我们要用数组赋值/取值/删除的方式
(2)$_SESSION是超全局变量。可以跨页面使用
$_SESSION['a']=1;
可以在另一个页面直接输出
我听说世界上还有一个叫做:cookie的东西,它和session有关系吗?
1)cookie可称为:浏览器缓存
2)cookie里面,也可以存放东西
3)存放的数据,可以是服务端php:要求存放的
4)cookie中存放的东西,其中有1样,叫做:session_id
存放东西的文件叫做:cookie文件
该文件在:客户电脑硬盘上,一般在:浏览器临时文件夹下 如火狐:C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\*.default\cookies.sqlite
文件中的内容,约……是这种形式
www.baidu.com,PHPSESSID=tuoijnm32gtee6lb3so9lk6lp2
www.sina.com ,PHPSESSID=abc,其他数据,其他数据
www.163.com ,PHPSESSID=efg,aa=123,bb=456
cookie读/写/删
1)用php程序读/写/删 cookie
(1)读取
print_r($_COOKIE); //$_COOKIE也是超全局变量,也是数组
echo $_COOKIE['x'];
(2)写入
//之前不能有任何实际字符的输出
setcookie ( "x" ,123 ,time()+10);
x:键名
123:键值。!!!不能是数组,只能是字符串或者数字!!!
生命周期:当前时间(时间戳)+10秒
若不带第3个参数,则浏览器关闭,cookie失效
(3)删除
<?php
//删除。将生命周期改成:上一秒,就删除了
setcookie ( "x" ,123 ,time()-1);
?>
测试下述代码。看看:服务端,是什么时候得到$_COOKIE['z']的
<?php
setcookie("z",123);
print_r($_COOKIE);//下一次刷新得到的
?>
Cookie的生命周期
如果Cookie不设定时间,它的生命周期为浏览器会话的期间,只要关闭浏览器,Cookie就会自动消失,称为会话Cookie,一般不保存在硬盘上,而是存储于内存中。
如果设置了过期时间,那么浏览器会把Cookie保存到硬盘中,再次打开浏览器时会依然有效,直到它的有效期超时。
虽然Cookie可以长期保存在客户端浏览器中,但浏览器最多允许保存300个Cookie文件,而且每个Cookie文件支持最大容量为4KB,如果达到限制,浏览器会自动随机删除Cookies。
Session信息储存于服务器端(默认以文件方式存储session),根据客户端提供的session _id来得到用户的文件,取得变量的值,session_ id可以使用客户端的Cookie或者访问的URL的附加数据来传送给服务器,然后服务器读Session的信息。也就是说,session _id是取得存储在服务上Session变量的身份证。如果配置文件“php.ini”中没有设置“session.auto_start=1”,那么要使用Session就必须先运行代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session_ id。
Php ini里面的参数设置:
session.save_path = "d:/wamp/tmp"; 保存变量的目录
session.auto_start; 表示是否自动启动
Session的配置与应用
//初始化session,需在文件头部。
session_start();
//配置seeeion
$_SESSION[name]=value;
//使用session
echo $_SESSION[name];
//删除当前session
unset($_SESSION[name]);
//删除所有session
session_destroy();
用Session制作一个登陆验证
<?php
$user=@$_POST['user'];
$pass=@$_POST['pwd'];
if($user=="xinhua" && $pass==1234){
$_SESSION['login']=1;
}if(@$_SESSION['login']==1){
echo "ok";
}else{echo "wrong";}
?>
<form action="" method="post">
用户名<input name="user" type="text" ><br>
密码 <input name="pwd" type="password" ><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
还没有留言,还不快点抢沙发?