$ _SESSION - 它会持续多久?

时间:2010-09-01 10:15:34

标签: php

我对PHP中的会话管理有点困惑。文档中的许多重点都专注于神奇的PHPSESSID cookie。我编写Ajax并且实际上正在考虑摆脱cookie。我知道我可以在php.ini文件中这样做。也可以通过我登录脚本顶部的简单ini_set(“session.use_cookies”,0)来抑制PHPSESSID。不要误会我的意思,我确实想要会议。如果需要,我的Ajax手抖将POST会话ID。从以cookie为中心的文档中,人们会得到一个印象,即所有会话到期处理都是通过cookie上的时间戳完成的。我不清楚cookie的时间戳究竟是如何通过无状态连接提示服务器使会话缓存失效的?换句话说,在无cookie设置中,如何指示服务器在一段时间后清理会话缓存?我还会打电话给session_set_cookie_params吗?看似古怪......

如果我理解得很好,那么我应该调用sessionID(sid)并检查返回“”以确定“sid”是否已经死亡。正确的吗?

感谢。

3 个答案:

答案 0 :(得分:4)

session.cookie_lifetime会影响session_start()设置的Cookie的 expires 参数。这就像setcookie(<sessionname>, <sessionid>, time()+<session.cookie_lifetime>, ...)。它建议客户不要在time()+<session.cookie_lifetime>之后使用该cookie(但它当然可以在之前删除它,完全不接受它或完全忽略“expires”参数)。
会话ID用于选择“正确”的会话数据。即如果请求不包含正确的会话ID,则会话数据不可用于php脚本 如果只有那个客户端知道会话ID(应该是这样)并丢弃包含会话ID的cookie,则会话数据无法访问。无法访问但仍存在于服务器上。

当脚本调用session_start()时,垃圾收集可能已启动,请参阅session.gc_probabilitysession.gc_divisor
然后,平面文件会话处理程序遍历session.save_path指定的目录中的所有文件,并检查“上次修改时间”(mtime)。如果该时间戳比现在更早 - session.gc_maxlifetime该文件被删除(除非该文件对应于当前会话ID,在这种情况下,文件的年龄无关紧要。)
这需要一些时间,因此不会在每次调用session_start()时执行。

即。服务器上的会话文件可能比session.cookie_lifetime和session.gc_maxlifetime都旧。
session.cookie_lifetime表示客户端在x秒后不需要存储cookie / id session.gc_maxlifetime表示会话机制,即x秒后无需保留数据 但只要数据保留在服务器上,如果发送了相应的session-id,就可以访问

答案 1 :(得分:1)

大多数系统的标准是1440秒(24分钟)。

但您可以更改系统var'session.gc_maxlifetime'以根据需要进行设置。

答案 2 :(得分:0)

检查Cookie生命周期的最佳方法是在浏览器中查看与您网站相关的Cookie(在“首选项/设置”下)。