【问题标题】:How to close a session in PHP when the browser is closed?关闭浏览器时如何关闭 PHP 中的会话?
【发布时间】:2013-05-08 11:23:43
【问题描述】:

我需要在浏览器关闭、崩溃、PC 重启等情况下关闭会话。

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

【问题讨论】:

  • 据我所知,这不能直接完成...您可以在 5 分钟的时间跨度内检查用户活动,并且当有人在那段时间空闲时 -> 销毁会话
  • 可能重复..... [关闭浏览器时销毁会话][1] [1]: stackoverflow.com/questions/4146647/…

标签: php session


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @Oliver..如果我们每 70 秒调用一次 ajax 文件。它可能会影响站点速度吗?
    • @Vishal 服务器将不得不处理更多请求。但是 php 脚本可以很短,每分钟一个额外的请求应该不是问题。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2014-08-15
        • 2011-12-17
        • 2012-04-11
        相关资源
        最近更新 更多