作者:书友71794607 | 来源:互联网 | 2018-07-16 05:02
在php中COOKIE与session通常用于注册登录与记录用户信息了,但是COOKIE与Session两个有很大的区别,下面我们一起来看看。
会话简介:HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本、图形、视频和所有
其他数据所有的规则。HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的
请求无关。虽然这种简化实现对于HTTP 的普及做出了卓越的贡献,但对于希望创建复杂的
Web 应用程序的开发人员来说,这点有点困扰。为了解决这个问题,出现了一种在客户端
机器上存储少量信息(COOKIE)。
由于COOKIE 大小限制、数量及其他原因,开发人员又提出了一种解决方案:session 会
话处理。
一.COOKIE
的应用
设置COOKIE:setCOOKIE()函数可以在客户端生成一个COOKIE 文件,这个文件可以保存到
期时间、名称、值等。
创建COOKIE
代码如下 |
|
setCOOKIE(‘name’,'Lee’,time()+(7*24*60*60));//设置一个过期时间为7天的COOKIE
?>
|
参数1:COOKIE 名称
参数2:COOKIE 值
参数3:COOKIE 过期时间
查看COOKIE
打开火狐浏览器:工具–页面信息-安全-查看COOKIE,可以查看到当前的COOKIE信息
读取COOKIE
代码如下 |
|
echo $_COOKIE['name'];
?>
|
删除COOKIE
代码如下 |
|
setCOOKIE(‘name’,”);
setCOOKIE(‘name’,'Lee’,time()-1);
?>
|
使用COOKIE 的限制
1、必须在HTML 文件的内容输出之前设置;
2、不同的浏览器对COOKIE 的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的COOKIE 数量最多为30 个,并且每个不能
超过4KB,每个WEB 站点能设置的COOKIE 总数不能超过20 个。
二.Session
会话处理
在使用session 会话处理,必须开始session,使用session_start()开始会话。
创建session 并读取session
代码如下 |
|
session_start();
$_SESSION['name'] = ‘Lee’;
echo $_SESSION['name'];
?>
|
判断session 是否存在
代码如下 |
|
session_start();
$_SESSION['name'] = ‘Lee’;
if (isset($_SESSION['name'])) {
echo $_SESSION['name'];
}
?>
|
删除session
代码如下 |
|
session_start();
$_SESSION['name'] = ‘Lee’;
unset($_SESSION['name']);
echo $_SESSION['name'];
?>
|
销毁所有session
代码如下 |
|
session_start();
$_SESSION['name'] = ‘Lee’;
$_SESSION['name2'] = ‘Lee’;
session_destroy();
echo $_SESSION['name'];
echo $_SESSION['name2'];
?> |
COOKIE与session的区别和关系
•存储位置:
1.session存储在服务器位置上,可以通过php.ini里面配置session相关配置
2.COOKIE存储在客户端上的上(其实可以分两种:
1,持久性COOKIE,设置了COOKIE的时间,以文件方式存在硬盘上,
2,会话COOKIE,没有设置COOKIE时间,COOKIE的生命周期也就是关闭浏览器前就消失,一般不会保存在硬盘,而是保存在内存上)
COOKIE和session的关系
COOKIE通过http报头发送:
COOKIE name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7
其中PHPSESSID就是关联服务器session的重要参数
再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7
session_id的生成格式就是:sess_加上一串PHPSESSID的值
我们可以这样理解:
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来 使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相 关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应 中返回给客户端保存。保存这个session id的方式可以采用COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器。一般这个COOKIE的名字都是类似于SEEESIONID
php.ini里面关于session和COOKIE有关的配置
1,session.use_COOKIE = 1
是否采用COOKIE方法传递session id值。默认是1,表示启用。
2,session.name = PHPSESSID
不管是COOKIE传递sessioin_id,还是GET方法传递session_id,都需要使用键值。他们的格式分别是COOKIE: sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定的。
3,session.use_only_COOKIEs = 0
表示只使用COOKIE 的方法传递session id。我们说过,传递COOKIE的方法,除了COOKIE,还有GET方法,GET方法是不安全的方法。在用户端禁用了COOKIE的时候,会采用GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。
4,session.COOKIE_lifetime = 0, session.COOKIE_path = / 以及session.COOKIE_domain =
如果使用COOKIE方法传递session_id的话,这里分别指定了COOKIE有效域、目录和时间。分别对应setCOOKIE()函数的形参$expire、$path和$domain。其中COOKIE_lifetime=0表示直到关闭浏览器才删除COOKIE。还可以使用session_set_COOKIE_params()函数修改这些值。
5,session_name([string $name])
获取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。
6,session_id([string $id])
与session_name()类似,但它是读取或者设置session_id的方法。同样,设置session_id的话,必须在session_start()之前调用才有效。
7,session_set_COOKIE_params()和session_get_COOKIE_params()
通过session_set_COOKIE_params()可以重新设定session.COOKIE_lifetime, session.COOKIE_path以及session.COOKIE_domain这三个php.ini设置。而session_get_COOKIE_params()则是获取这些设定的值。
这里我自己特别去做了一张表,把他们的不同点和相同点总结了一下: