-1

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

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

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

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

感谢帮助。

4

1 回答 1

1

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

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

于 2018-01-10T10:10:18.380 回答