在我的database
我有一个表LOG
,每次用户成功登录时我都会在其中写一行。
同样的事情发生在用户时log-out
,但是如果注销不是由页面完成的,logout.php
那么一旦$_SESSION
过期,就不会在database
.
如何避免这种情况或LOG
每次$_SESSION
到期时自动写入?
您可以实现自己的会话保存处理程序。您想在保存处理程序的销毁和 GC 方法中处理这个问题。
这样做通常相当痛苦:PHP 根本没有真正以任何有意义的方式公开会话到期。
但是,通常 PHP 会安装一个 cron 作业来使会话过期(在我的 Linux 服务器中是这样/etc/cron.d/php5
):不知道你会怎么做,但你可能会修改系统上的等效脚本以打开即将被删除的日志文件,然后将他们的身份发送到您的日志数据库。
好吧,会话到期完全在浏览器上处理,它根本不涉及服务器,因此会话到期无法与服务器通信并导致写入数据库。
也就是说,有办法回到你正在寻找的东西。如果您知道 cookie 将在客户端浏览器上存在多长时间,并且您记录了刷新开始时间的最后一次站点访问,则可以检查所有早于超时的访问。
如果会话存在于浏览器会话中,那么您就是 SOL。只需记录访问时间并推断其余时间。