在php中cookie与session通常用于注册登录与记录用户信息了,但是cookie与Session两个有很大的区别,下面我们一起来看看。

会话简介:HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本、图形、视频和所有
其他数据所有的规则。HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的
请求无关。虽然这种简化实现对于HTTP 的普及做出了卓越的贡献,但对于希望创建复杂的
Web 应用程序的开发人员来说,这点有点困扰。为了解决这个问题,出现了一种在客户端
机器上存储少量信息(cookie)。
由于cookie 大小限制、数量及其他原因,开发人员又提出了一种解决方案:session 会
话处理。
一.Cookie
的应用
设置cookie:setcookie()函数可以在客户端生成一个cookie 文件,这个文件可以保存到
期时间、名称、值等。
创建cookie

代码如下复制代码
?>

参数1:cookie 名称
参数2:cookie 值
参数3:cookie 过期时间

查看cookie

打开火狐浏览器:工具–页面信息-安全-查看cookie,可以查看到当前的cookie信息
读取cookie

代码如下复制代码
?>

删除cookie

代码如下复制代码
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['name'] = ‘Lee’;
echo $_SESSION['name'];
?>

判断session 是否存在

代码如下复制代码
$_SESSION['name'] = ‘Lee’;
if (isset($_SESSION['name'])) {
echo $_SESSION['name'];
}
?>

删除session

代码如下复制代码
$_SESSION['name'] = ‘Lee’;
unset($_SESSION['name']);
echo $_SESSION['name'];
?>

销毁所有session

代码如下复制代码
$_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()则是获取这些设定的值。

这里我自己特别去做了一张表,把他们的不同点和相同点总结了一下:

09-17 09:05