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

时间:2010-09-01 05:06:58

标签: php session session-variables session-timeout

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

2 个答案:

答案 0 :(得分:3)

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

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

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

由于HTTP是无状态的,服务器无法知道客户端什么时候消失(关闭浏览器窗口,出去购买一些饮料......)因此,唯一明智的做法是测量时间自从他们上一次请求以来已经过去了,并假设它们超过了一个阈值就消失了。这段时间称为“会话超时”或“会话生存期”。您可以在php.ini文件中或使用ini_set()功能设置其默认值。有关详细信息,请参阅section on session directives in php.ini

答案 1 :(得分: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最终都是会话文件的有效生命周期。