1、php中ssion的生成机制
我们先来分析一下php中是怎么生成一个ssion的。设计出ssion的目的是保持每一个用户的各种状态来弥补http协议的不足(无状态)。我们现在有一个疑问,我们都知道ssion是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?这个时候就得借助cookie了。当我们在代码中调用ssion_start();时,php会同时往ssion的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件。ssion文件名称像这样:
格式为ss_英语六级准考证{ssionid} ,这时ssion文件中没有任何内容,当我们在ssion_start();添加了这两行代码:
复制代码 代码如下:
$_ssion[‘name’] = ‘wanchun0222’三年级课外书必读;;
$_ssion[‘blog’] = ‘coderbolg.net’;
这时文件就有内容了:
复制代码 代码如下:
name|s:11:”wanchun0222″;blog|s:13:”coderbolg.net”八的序数词;;
这时再看看cookie:
可以看到服务器为我们自动生成了一个cookie,cookie名称为”phpssid”,cookie内容是一串字符,其实这串字符就是{ssionid}。也许你已经明白了,当我们使用ssion时,php就先生成一个唯一的ssionid号(如2bd170b3f86523f1b1b60b55ffde0f66),再在我们服务器的默认目录下生成一个文件,文件名为ss_{ssionid},同时在当前用户的客户端生成一个cookie,内容已经说过了。这样php会为每一个用户生成一个ssionid,也就是说一个用户一个ssion文件。php第一次为某个用户使用ssion时就向客户端写入了cookie,当这个用户以后访问时,浏览器会带上这个cookie,php在拿到cookie后就读出里面的ssionid,拿着这个ssionid去ssion目录下找ssion文件。找到后在调用$_ssion[‘blog’]的时候显示出来。
2、php中ssion的过期回收机制
我们明白了ssion的生成及工作原理,发现在ssion目录下会有许多ssion文件。当然这些文件一定不是永远存在的,php一定提供了一种过期回收机制。在php.ini中ssion.gc_maxlifetime为ssion设置了生存时间(默认为1440s)。如果ssion文件的最后更新时间到现在超过了生存时间,这个ssion文件就被认为是过期的了。在下一次ssion回收的时候就会被删除。那下一次ssion回收是在什么时候呢?这和php请求次数有关的。在php内部机制中,当php被请求了n次后就会有一次触发回收机制。到底是请求多少次触发一次是通过以下两个参数控制的:
复制代码 代码如下:
ssion.gc_probability = 1
ssion.gc_divisor = 100
这是php.ini的默认设置,意思是每100次php请求就有一次回收发生。概率是 gc_probability/gc_divisor 。我们了解了服务器端的ssion过期机制,再来看看客户端的cookie的过期机制。
如果cookie失效了浏览器自然发送不了cookie到服务器,这时即使服务器的ssion文件存在也没用,因为php不知道要读取哪个ssion文件。我们知道php的cookie过期时间是在创建时设置的,那么php在创建ssion的同时为客户端创建的cookie的生命周期是多久呢?这个在php.ini中有设置:ssion.cookie_lifetime 。这个值默认是0,代表浏览器一关闭ssionid就失效。那就是说我们把ssion.gc_maxlifetime和ssion.cookie_lifetime设置成同一个值就可以控制ssion的失效时间了。
3、php中王之涣ssion的客户端存储机制
由上面的介绍我们可以知道,如果用户关闭了cookie,那我们的ssion就完全没法工作了。是的,确实是这样。php中ssion的客户端存储机制只有cookie吗?不是的。既然我们的ssionid 不能通过cookie传递到各个页面,那我们还有另一个法宝,就是通过页面get传值的方式。
php可以在cookie被禁用时自动通过get方式跨页传递ssioni拍拍熊d,前提是设置php.ini的ssion.u_trans_sid为1。这时当我们在客户端禁用了cookie时使用了ssion,并在当前页面通过点击链接到另一页面时,php会自动在链接上添加ssionid参数,像这样:nextpage.php?ssionid=2bd170b3f86523f1b1b60b55ffde0f66。我想你应该看到了这种方式的缺点:好像不够安全啊。
本文发布于:2023-04-06 21:59:17,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/5f97535717809570404261e99221815c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php中Session的生成机制、回收机制和存储机制探究.doc
本文 PDF 下载地址:php中Session的生成机制、回收机制和存储机制探究.pdf
留言与评论(共有 0 条评论) |