手机版

php中会话的生成机制、恢复机制和存储机制研究

时间:2021-10-07 来源:互联网 编辑:宝哥软件园 浏览:

1.php中会话的生成机制。

让我们首先分析一下如何用PHP生成一个会话。设计会话的目的是让每个用户保持各种状态,以弥补HTTP协议(无状态)的不足。现在我们有一个问题。我们都知道会话存储在服务器中。既然是用来保持每个用户的状态,那它用什么来区分用户呢?这时,我们不得不求助于饼干。当我们在代码中调用session_start()时;同时,PHP会生成一个文件到SESSION的存储目录(/tmp/默认)和客户端的cookie目录。会话文件名如下所示:

格式为sess_{SESSIONID},当会话文件中没有任何内容时,当我们在session_start()中时;增加这两行代码:复制代码如下: $ _ session[' name ']=' wanchun 0222 ';

$ _ SESSION[' blog ']=' coderbolg . net ';此时文件有内容:复制代码如下: name | s 3360113360 ' wanchun 0222 ';blog | s 336013: ' coderbolg . net ';然后看看饼干:

可以看到服务器自动为我们生成了一个cookie,cookie名称为‘PHPSESSID’,cookie内容为字符串,实际为{SESSIONID}。可能大家已经知道了,当我们使用session的时候,PHP会创建一个唯一的SESSIONID号(比如2bd170b3f86523f1b60b55ffde0f66),然后在我们服务器的默认目录下生成一个名为sess_{SESSIONID}的文件,同时在当前用户的客户端生成一个cookie。内容已经说了。这样,PHP将为每个用户生成一个SESSIONID,这意味着为每个用户生成一个会话文件。当PHP第一次为用户使用会话时,它会向客户端写入一个cookie。当用户稍后访问它时,浏览器会带来这个cookie。获取cookie后,PHP读出其中的SESSIONID,并使用这个SESSIONID在会话目录中找到会话文件。找到后,调用$_SESSION['blog']时会显示出来。

2.php中会话的过期恢复机制。

我们了解了session的产生和工作原理,发现session目录中会有很多session文件。当然,这些文件不能永远存在,PHP必须提供过期的回收机制。php.ini中的Session.gc_maxlifetime设置会话的生存期(默认值为1440s)。如果会话文件的上次更新时间已经超过了到目前为止的生存时间,则认为会话文件已过期。它将在下一次会话回收时被删除。下一次会议什么时候回收?这与php请求的数量有关。在php的内部机制中,一旦PHP被请求n次,就会触发回收机制。请求多少个触发器由以下两个参数控制:复制代码如下:session.gc_probability=1。

Session.gc _ divisor=100这是php.ini的默认设置,这意味着每100个php请求,就会发生回收。是GC _概率/GC _微分器。我们了解服务器端的会话过期机制,然后再看看客户端的cookie过期机制。

如果cookie无效,浏览器自然无法将cookie发送到服务器。这时,即使服务器的会话文件存在,也没有用,因为PHP不知道读哪个会话文件。我们知道PHP cookies的过期时间是在创建时设置的,那么PHP在创建session时为客户端创建的cookie的生命周期有多长呢?这个php.ini中有一个设置:session.cookie_lifetime。默认情况下,该值为0,这意味着浏览器一关闭,SESSIONID就会无效。也就是说,我们可以通过将session.gc_maxlifetime和session.cookie_lifetime设置为相同的值来控制会话的到期时间。

3.php中会话的客户端存储机制。

从上面的介绍中,我们可以知道,如果用户关闭了cookie,那么我们的会话将根本无法工作。是的,它是。php会话的客户端存储机制仅仅是cookie吗?不是的。由于我们的SESSIONID不能通过cookie传递到每个页面,所以我们还有另一个法宝,那就是通过page GET传递值。

如果php.ini的session.use_trans_sid设置为1,那么当cookie被禁用时,PHP可以通过GET在页面之间自动传递SESSIONID。这时,当我们使用session时cookie在客户端被禁用,而当当前页面通过点击链接到另一个页面时,PHP会自动给链接添加SESSIONID参数,就像这样:nextpage.php?session id=2bd 170 B3 f 86523 f1 B1 b 60 b 55 ffde 0 f 66 .我想你已经看到了这种方法的缺点:似乎不够安全。

版权声明:php中会话的生成机制、恢复机制和存储机制研究是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。