PHP会话超时回调?

时间:2009-08-17 09:45:27

标签: php linux apache session

我正在运行PHP + APACHE + CENTOS Linux组合。

我已实施登录&在网站上注销。

我的问题是,我怎么知道php会话何时超时(用户已经关闭浏览器而没有注销)?

原因是,当用户执行以下任何操作时,我想执行一些清理和/或数据库更新(调用另一个PHP): (1)LOGGED-OUT或(2)TIMED-OUT

我的猜测是我必须使用Apache / Linux,对吧?

4 个答案:

答案 0 :(得分:4)

您可以创建一个脚本,该脚本将以某个半定期间隔(每5分钟一次,最近使用crontab作业)运行,而不会检测到会话超时,该脚本将为任何人注销/执行清理谁自动在最后一小时(或任何你的超时值)没有活动。只需在用户表中添加“lastseen”即可。

答案 1 :(得分:2)

跟踪数据库中的会话

如果您将会话的详细信息保存在数据库表中并记录任何活动,则可以轻松检查哪些会话在特定时间段内处于非活动状态。

进程队列

为用户操作添加清理功能会不必要地减慢您的网站速度。在从服务器获得响应之前,用户不必等待此类操作。

CRON

相反,您可以将要执行的操作添加到队列表,然后使用CRON作业定期检查队列表以查看需要执行的操作。 CRON语法列在here

答案 2 :(得分:1)

您可以将会话ID存储在带有时间戳的数据库中,并在每次用户请求网页时更新时间戳。

然后设置一个查看每个“活动”会话的cron,计算不活动时间并将会话更新为“死”(可以使用定期运行的单个SQL语句完成)。

此外,修改您的注销以更新会话表并将会话设置为“死”。

无论如何,我认为没有其他方法可以做到这一点(使用“标准”PHP函数),但让我们看看其他人说的话。

答案 3 :(得分:1)

我有同样的问题,但使用Lighty + PHP + Ubuntu。我认为问题是,php只对页面请求作出反应,因此没有机会让PHP在超时时引发事件。

您可以覆盖PHP中的session-store-functions,但这也无济于事。

您可以将最后一个事件的时间存储在会话中,并且每个会话都会清理已经遇到超时的旧会话。不是一个非常干净的方式,但我找到了唯一的工作方式。