我有一个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进行了测试。
有人可以向我解释我哪里弄错了吗?
答案 0 :(得分:3)
应删除cookie,因为您将其生命周期设置为0。
也许还有一个firefox进程在运行,请看一下taskmanager。
答案 1 :(得分:3)
上面的答案,包括被接受的答案,都是错误的。
由于知名浏览器开发者提供了一些design decisions,会话Cookie不会在浏览器关闭时过期。
基本上,会话过期cookie会干扰当前的浏览器行为,浏览器会下载更新,然后要求重新启动。 此类更新后的用户重新启动浏览器,并希望尽可能减少中断。 但是,保持原始会话cookie行为会在浏览器更新期间立即清除许多cookie =&gt;重启过程会破坏用户体验。 因此,我们做出了设计决策,现在默认行为是不清除会话cookie。想要返回原始行为的高级用户通常必须启用特定的向后兼容性选项或显式cookie清除选项。
答案 2 :(得分:1)
此外,您应该在标题('Location:')之后终止您的脚本,否则它将继续运行并将“安全”页面输出到客户端(或者如果您对Web服务器很幸运,希望忽略它无论如何,消耗资源。
答案 3 :(得分:0)