2

当浏览器关闭、崩溃、PC 重新启动等时,我需要关闭会话。

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

4

4 回答 4

3

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

php ini 设置session.gc_maxlifetime决定了会话可以保持活动的时间。

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

于 2013-05-08T11:36:11.767 回答
2

这不能按照你想象的方式完成。您不能在 php.ini 中直接对此类事件做出反应。您可以获得的最接近的方法是使用 ajax 来保持会话处于活动状态。

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

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

于 2017-03-30T06:46:01.427 回答
-1

当用户运行 crash brouser 时,cookie 会自动删除。

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

一些不容易的方法是 websocket 和长轮询连接,但它不容易配置,也不是好主意。

于 2013-05-08T11:28:44.223 回答