在会话被销毁时调用函数/处理程序

时间:2018-01-10 09:54:55

标签: php session session-set-save-handler

我用PHP编写了一个用户身份验证的网站。我使用了会话。当用户登录时,设置数据库中的标志,并且当他注销时,重置该标志。这可以防止一个用户多次登录网站。

一切正常,但当用户忘记注销时,会话在一段时间后变为无效。当用户现在尝试重新登录时,他将被阻止登录,因为该标志仍然设置。

当会话变得无效/被破坏时,我需要一个将被调用的处理程序/函数。我怎么能这样做?

我知道有一个名为session_set_save_handler的函数,但我只需要destroy函数。不需要其他函数,我可以访问该函数中的$ _SESSION变量吗?因为在此变量中保存了用户标识,其标志需要重置。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

由于PHP没有可以在后台检查会话的进程,因此您必须使用cron作业来检查陈旧的会话,或者在任何人访问重置所有陈旧会话的站点时调用的函数。两者都不理想。

为什么不在登录时检查会话,而不是担心cron作业?而不是简单的标志使用DATETIME字段,您可以检查陈旧性。将字段称为" last_accessed"并在用户在系统上执行任何操作时将其更新为NOW()。然后当他们从另一个浏览器登录时,如果" last_accessed" < 10分钟或您决定的任何超时间隔,不允许登录,但如果超过该超时允许登录并刷新时间戳。