0

会话如何工作?在哪里保存会话值?如何增加会话寿命?

4

2 回答 2

3

会话使 HTTP 成为一个几乎有状态的协议,实际上它是无状态的。会话数据是特定于客户端的,但存储在服务器端,通常是文本文件中的序列化数组。(可以使用会话处理程序在 PHP 中覆盖该行为,请参阅session_set_save_handler()。)

服务器给客户端一个 cookie,其中包含唯一标识该客户端的标识符(会话 id )。当一个 HTTP 请求发出时,包含会话 id 的 cookie 会随之发送,服务器定位客户端的会话数据并加载,恢复客户端的虚拟状态。(有时 id 不是通过 cookie 发送的,而是作为 GET 参数发送的,但这无关紧要。)

在 PHP 中,您可以在使用session_start()创建或恢复会话之后,使用$_SESSION超全局访问会话状态。

由于 HTTP 是无状态的,服务器无法知道客户端何时离开(关闭浏览器窗口,出去买一些饮料......)因此,唯一明智的做法是测量自他们的最后一个请求,如果超过阈值则假设他们离开了。这段时间称为“会话超时”或“会话生存期”。php.ini您可以在文件中或使用ini_set()函数设置其默认值。有关详细信息,请参阅php.ini中有关会话指令的部分。

于 2010-09-01T05:29:11.070 回答
1

会话如何工作: http ://www.tizag.com/phpT/phpsessions.php

要增加会话生命周期,请使用ini_set具有session.gc_maxlifetime属性的函数:

 ini_set('session.gc_maxlifetime', '28800'); // Set maxlifetime to 4 hours

注意:如果您在同一台服务器上有多个页面,每个页面都使用会话(相同或不同的命名会话,没关系),任何这些脚本的最小gc_maxlifetime 最终成为会话文件的有效生命周期。

于 2010-09-01T05:11:02.203 回答