【问题标题】:Destroy or unset session when user close the browser without clicking on logout [duplicate]当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]
【发布时间】:2011-02-19 20:45:47
【问题描述】:

可能重复:
How do I expire a PHP session after 30 minutes?

我正在销毁 logout.php 中的所有会话 var 并在用户单击注销时调用它,什么是用户不单击 logout.php 而是直接关闭浏览器。那我怎么删除会话???

【问题讨论】:

标签: php session


【解决方案1】:

您可以为会话数据设置过期时间,使用每个session_start 调用对其进行测试,如果会话过期则销毁会话:

session_start();
if (!isset($_SESSION['EXPIRES']) || $_SESSION['EXPIRES'] < time()+3600) {
    session_destroy();
    $_SESSION = array();
}
$_SESSION['EXPIRES'] = time() + 3600;

【讨论】:

  • 这是一个有点尴尬的解决方案,你不觉得吗?有一个内置函数!
  • $_SESSION['EXPIRES'] ....'EXPIRES' 是特定的,或者我可以放置我的会话变量名称??
  • @GuidoH:您最好检查一下session_cache_expire 的实际作用。
  • 好的,但是如何启动会话,因为浏览器已关闭,因此会话 cookie(即会话 cookie)现在在客户端上被销毁?
  • 这个答案没有解决OP的问题。问题是:如何在关闭浏览器时销毁会话,而不是在延迟后销毁会话。
【解决方案2】:

你不能。但是,会话 cookie 通常在没有过期时间的情况下发送,这意味着它们会在浏览器关闭时被删除,因此会话无论如何都会丢失。

【讨论】:

  • 有什么消息可以避免这个问题吗?
【解决方案3】:

如果您不修改会话 Cookie 的到期时间,则 PHP 会话应在浏览器窗口关闭时自动到期。如果没有发生这种情况,那么我会假设您已经以某种方式对此进行了修改,我们需要更多详细信息来提供帮助。

【讨论】:

    【解决方案4】:

    可以将会话设置为简单地过期,服务器在一段时间后不会收到客户端的消息。这就是你要寻找的方向......

    马丁

    【讨论】:

      【解决方案5】:

      如果您没有为会话 cookie 设置过期时间,它将在用户关闭浏览器时被删除,这对于大多数实际用途具有相同的效果(除非您担心存储或安全性)。如果这还不够好,您可以将会话设置为很快过期并通过 AJAX 定期刷新它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 2017-01-17
        • 2015-12-13
        • 2014-08-15
        • 1970-01-01
        相关资源
        最近更新 更多