如何在浏览器关闭时关闭PHP中的会话?

时间:2013-05-08 11:23:44

标签: php session

我需要在浏览器关闭,崩溃,PC重启等时关闭会话,等等。

我知道有cookie解决方案,但我需要一些安全的服务器端,因为用户可以删除cookie。

4 个答案:

答案 0 :(得分:3)

你不必。垃圾收集器将清理您的会话。

php ini设置session.gc_maxlifetime确定会话保持活动状态的时间。

超过此值时,会自动删除会话。

答案 1 :(得分:2)

这不可能按照你想象的方式完成。 你不能直接对php中的这种事件作出反应。 你可以得到的最接近的是使用ajax来保持会话的活跃。

  1. 创建一个小的PHP脚本,除了更新$ _SESSION ['last_request']之外什么也不做,让我们称之为pulse.php
  2. 在您发送请求的页面中插入javascript 每隔60秒yourdomain.com/api/pulse.php
  3. 检查每个请求上的最后一个请求是否超过70秒 如果它是启动你的清理脚本并杀死会话。 如果浏览器崩溃,则清理脚本将无法运行。除非您在超过70秒之后但在会话到期之前收到请求,否则会话将以常规方式超时。 如果将会话数据存储在数据库中,则可以解决此问题。 然后,您可以运行一个工作人员或一个cronjob,定期检查是否存在最后一次请求超过70秒的会话。 为什么70秒?如果您希望每分钟一次请求,则应该留出一些时间用于客户端的klatencys或慢速硬件。

答案 2 :(得分:0)

您好,您不需要关闭会话。因为会话的默认行为是当用户关闭浏览器时会破坏会话。我们可以通过改变php.ini文件中的会话生命周期来改变这种行为 session.cookie_lifetime = 0.否则默认情况下  当您重新打开浏览器时,会话中将没有数据。

答案 3 :(得分:-1)

当用户运行崩溃的brouser时,cookie会自动删除。

在php中无法知道用户何时关闭brouser。

一些不容易的方法是websocket和长poling连接,但它不容易配置而且不是好主意。