如何检测会话何时结束

3
有没有办法检测到有人离开你的网站?目前我只知道可以使用ignore_user_abort(),但这就是我的全部了。
我需要知道这个的原因是因为我需要一个脚本在有人离开网站时执行。

1
你可以跟踪会话 ID 最后一次使用的时间,当超过一定阈值时运行脚本。或者你可以使用 JavaScript 检测当用户尝试离开你的网站时。我相信你已经看到那些讨厌的弹窗,在网页上试图让你留下来。 - Manual5355
4个回答

4

为每个用户在数据库中记录一个时间戳,并在每次页面加载时(或通过AJAX)更新此时间戳。

当最后更新的时间戳比一定时间(30分钟?)旧时,您可以认为他们已经离开了网站并执行您的代码,然后删除该条目。

  • 想法:一个“用户”可以是由其IP和用户代理作为MD5哈希组成的主键。

我需要Cron来完成这件事吗? - daryl
是的,你可能需要运行旧条目。你不能依赖通过JavaScript捕获离开的人。 - fire
我有点回到了最初的问题。我不希望cron在他们进入网站后的2分钟内运行,它基本上需要是个体化的,如果这样说得通的话。 - daryl
1
PHP有一个会定期调用的会话GC函数,用于清理旧会话。一些会话后端在加载时会忽略过期的会话。无需cron。http://php.net/manual/en/session.configuration.php#ini.session.gc-probability - rrehbein
cron 在设定的时间运行,比如每 15 分钟一次。它所做的只是查找旧条目,例如 SELECT * FROM users_browsing WHERE browse_date >= NOW() - INTERVAL 30 MINUTES,然后对于每个结果,可以执行相应的代码。 - fire
显示剩余2条评论

1

0

可以轻松使用JavaScript完成,检查这个解决方案

  <body onbeforeunload="winCloseFunc();"> =) 

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接