【发布时间】:2014-07-17 15:10:12
【问题描述】:
我正在开发一个“flash 网站”。在这个程序中,我想添加一个“在线用户”列表,它依赖于会话:用户登录时启动会话,并且用户在数据库中被标记为在线。一旦退出或关闭浏览器,用户在数据库中被标记为离线。
我知道在浏览器关闭时运行某些功能需要 Javascript,而且也不安全:如果浏览器崩溃,这些功能将无法运行。这就是为什么我决定在用户注销或用户的 session 超时时更新数据库。
我一直在查找会话超时,并遇到了这个问题,还有许多其他类似的标记为重复:How do I expire a PHP session after 30 minutes?
答案方法的问题是;这是一个条件语句,检查用户的最后一次活动是否是 X 秒前,如果没有活动,则超时。在某些网站中有用,但对在线用户列表无用,因为它会在发送新请求时更新,并且在用户关闭浏览器后不会有任何请求。
其他答案中还提到了session.gc_maxlifetime 和session.cookie_lifetime 的使用,但最佳答案指出使用它们是一个坏主意;一种不会破坏会话,只是 cookie,另一种是“成本密集型”。
我想要的是用户超时和数据库更新并将用户标记为离线不使用使用 If-Conditional 句子,或者可能使用不同的 If-conditional 句子,仅必须在用户登录时使用一次,例如计时器或其他东西,并且每当发送请求时,计时器都会重新启动...这些只是我目前关于如何解决此问题的想法。
但是,我该怎么做呢?如果答案非常简单明了,我很抱歉,我对 PHP 很陌生。
编辑:长话短说:
我想在用户关闭他的浏览器后运行一个函数,或者20分钟不活动。
澄清...
我想在闲置 20 分钟后更新数据库即使浏览器已关闭。
【问题讨论】:
标签: php mysql session cookies timeout