8

在每次加载页面时,我都会运行session_start()以恢复当前会话。从什么时候session.gc_maxlifetime开始计算?第一次session_start()被调用并设置了该会话的cookie?或者计时器是否每隔一段时间重新启动一次session_start()

设置为session.gc_maxlifetime大约 24 分钟,在此时间线中,会话数据应该被垃圾收集

 1. 12:00:00 First page load, session_start(), session cookie created
 2. 12:10:00 page load, session_start() 
 3. 12:26:00 page load, session_start()
 4. 12:55:00 page load, session_start()

如果计时器在第一页加载时启动,session_start()那么我希望它会在加载 3 时进行垃圾收集。但是如果它重置 every session_start(),那么它直到加载 4 才会收集。

我希望它是后者,因为这样我可以每隔几分钟做一个 javascript 心跳来调用一个运行的页面session_start()

如果是前者,session.gc_maxlifetime从创建会话 cookie 开始计数我需要销毁/重新创建或 regenerate_id 来重置计数?

4

1 回答 1

2

它来自最后一次 session_start() 调用 OR/AND 最后一次写入。我的猜测是后者,因为这会改变 PHP 垃圾收集器用来确定是否需要删除的“最后修改”时间戳。在这种情况下,它从最后一个使用 session_start() 的脚本开始计数,或者通过调用 session_write_close() 显式地在脚本中间结束。

PS这将使“心跳”变得漂亮而简单(一行): http: //prototypejs.org/api/ajax/periodicalUpdater

于 2012-10-30T19:40:26.660 回答