2009-11-23 48 views
-1

究竟发生了什么?

我不知道接下来所以我不明白session_set_save_handler()实际上如何工作。

+2

这个问题,正如措词,是没有意义的。你在问PHP如何实际超时吗?默认超时时间有多长?或者,正如问题的主体所暗示的那样,您是在问保存会话处理程序是如何工作的? 正如措辞,我不知道你会看到会话到期和可以附加到会话保存处理程序之间的关系。 – delfuego 2009-11-23 16:00:19

+0

@ delfuego,我问你所有提到的。 – Mask 2009-11-23 16:03:25

+0

然后你需要花一点时间在PHP会话参考中: http://www.php.net/manual/en/book.session.php 这应该回答你所有的问题。 – delfuego 2009-11-23 16:11:24

回答

1

会话超时在php.ini宣布
如果你可以编辑php.ini,变化:
的session.gc_maxlifetime 72000
如果您不能编辑php.ini,把这个在您的.htaccess文件:
php_value session.gc_maxlifetime 72000
即使没有任何活动,这应该允许会话“活”至少20小时(72,000秒)。

如果这不起作用,并且您在共享主机上,则可能是主机定期清空会话目录。你的会议是否会在预先确定的时间内死亡? (即10分钟?)如果是这种情况,可以使用自定义会话处理程序将会话移入数据库。

+0

当没有请求时会话超时发生,我想知道如果没有请求时怎么办? – Mask 2009-11-23 16:13:41

+0

我仍然很困惑,你对会话超时问题的看法有什么*与您询问的有关会话保存处理程序的问题有关。 – delfuego 2009-11-23 16:49:20

0

大多数人会认为session.gc_maxlifetime定义了会话的生存期。

但这并不完全正确。 session.gc_maxlifetime只是在PHP会话实现的垃圾回收器假定会话过期之后的生命周期。但垃圾收集器只能被调用1%(默认设置)。所以会话可能会被使用,尽管它已经过期了。

如果您自己实现会话超时机制并将其注册到session_set_save_handler,那么最好的办法是使用会话超时机制。它应该测试当前会话是否仍然有效,如果过期则立即使其无效。

有关详细信息,请参阅my response to How do I expire a PHP session after 30 minutes?