【问题标题】:Do session cookies expire when the browser is closed?浏览器关闭时会话 cookie 会过期吗?
【发布时间】:2011-04-21 14:54:50
【问题描述】:

我有一个 PHP 应用程序,一旦用户通过身份验证,我就会在其中设置 $_SESSION['user']="logged"。我称之为 loginpage.php。

一旦通过身份验证并设置会话变量,用户将被带到以以下行开头的成员页面:

<?php
session_set_cookie_params(0,'/');
session_start();
if($_SESSION['user'] != 'logged') {
header ("Location:loginpage.php");
}?>

当用户登录,关闭浏览器然后访问会员页面时,我希望他被重定向到 loginpage.php。

但是,这不会发生。会话 cookie 仍然存在于浏览器中 - 我使用 Firefox 对此进行了测试。

谁能向我解释我哪里弄错了?

【问题讨论】:

  • 查看会话cookie以获取其有效期。

标签: php session cookies session-cookies


【解决方案1】:

上面的答案,包括接受的答案,都是错误的。

会话 cookie 不会在浏览器关闭时过期,因为知名浏览器开发人员制作了一些 design decisions

基本上,会话到期 cookie 会干扰当前的浏览器行为,即浏览器下载更新,然后要求重新启动。 此类更新后的用户会重新启动浏览器并希望尽可能减少中断。 但是,保留原始会话 cookie 行为会在浏览器更新 => 重新启动过程中立即清除一些 cookie,并会破坏用户体验。 因此做出了设计决策,因此现在默认行为是清除会话 cookie。想要恢复原始行为的高级用户通常必须启用特定的向后兼容性选项或明确的 cookie 清除选项。

【讨论】:

    【解决方案2】:

    你也应该在 header('Location:') 之后终止你的脚本,否则它会继续运行并将“安全”页面输出到客户端(或者如果你很幸运 Web 服务器可能会忽略它) 无论如何都会消耗资源。

    【讨论】:

      【解决方案3】:

      Look here

      “过期时间戳是相对于服务器时间设置的,不一定与客户端浏览器中的时间相同。”

      可能是……不知道。

      【讨论】:

        【解决方案4】:

        cookie 应该被删除,因为你将他的生命周期设置为 0。

        可能还有一个firefox进程在运行,看看taskmanager。

        【讨论】:

          猜你喜欢
          • 2015-08-12
          • 1970-01-01
          • 1970-01-01
          • 2012-08-20
          • 2014-08-14
          • 2013-07-18
          • 2013-11-17
          • 1970-01-01
          • 2015-07-03
          相关资源
          最近更新 更多