【发布时间】:2011-02-03 17:35:51
【问题描述】:
所以我有这个问题,当我在页面上一段时间没有做任何事情时,在我重新加载页面后 $_SESSION 被清除。我检查了代码,它没有任何unset() 函数或任何其他可以清除$_SESSION 变量的东西。
任何想法为什么会发生?
编辑:如果我想让会话一直持续到浏览器关闭,我应该怎么做?我不明白,因为gc 检查会话是否在session_start 上过期,但是我不能在调用session_start 之前修改会话数据,所以在调用session_start 之后修改会话数据会导致过期还是要开会?
session.cookie_lifetime 默认设置为 0,session.gc_maxlifetime、session.gc_divisor、session.gc_probability 也设置为默认值。
【问题讨论】:
-
session.gc_maxlifetime 是什么价值,你了解 my post on how PHP’s session expiration model works吗?
-
@Gumbo,session.gc_maxlifetime 设置为默认值 1440。我想我做到了,是的。我也将 session.gc_probability 和 session.gc_divisor 设置为默认值。
-
@Richards:这个模糊的空闲时间不是这 1440 秒吗?请记住,PHP 的默认垃圾收集器会根据会话文件的修改时间来计算年龄。
-
@Gumbo,但我的问题是:如何重置会话的垃圾收集器计时器,使其不会擦除会话?我不明白它的原因,当调用 session_start() 时,垃圾收集器会完成它的工作,但是在调用 session_start()之前我无法修改会话数据>.
-
@Richards:你不能重置它,因为没有计时器。会话数据的年龄(即上次修改的时间)与 session.gc_maxlifetime 值一起构成会话是否过期。垃圾收集器只是删除此类会话的例程。当这种情况发生时,会话 已 已经过期。
标签: php session-variables