1

我有一个 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 对此进行了测试。

有人可以向我解释我在哪里弄错了吗?

4

4 回答 4

4

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

由于著名浏览器开发人员做出的一些设计决定,会话 cookie 不会在浏览器关闭时过期。

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

于 2015-06-29T11:19:48.353 回答
3

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

也许还有一个firefox进程在运行,进入taskmanager看看。

于 2010-10-06T03:37:11.323 回答
1

此外,您应该在标头('Location:')之后终止脚本,否则它将继续运行并将“安全”页面输出到客户端(或者如果您很幸运,希望 Web 服务器会忽略它)并且消耗资源。

于 2010-10-06T15:16:06.260 回答
0

看这里

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

可能是那个……不知道。

于 2010-10-06T03:41:01.710 回答