我写了一个带登录机制的php网站。当用户使用正确的用户名和用户密码时,php会给他/她一个$ _SESSION ['userid']。
在index.php中,我用以下内容检查登录: -
if (!($_SESSION['userid'])){?>
<script>
window.location='login.php';
</script>
<?php }?>
它长时间工作正常。
最近,我在Chrome中意识到,在短时间内(例如几分钟),浏览器会清除会话变量,因此,无论我刷新页面还是点击导致index.php?XXXX的其他菜单按钮,检查登录java脚本工作,并踢回login.php。但是这样的清算不会发生在firefox和IE上。
我注意到chrome有一些特殊情况,当缺少favicon.ico时,浏览器将执行301重定向,清除所有会话。但我相信我已经通过href =“/ favicon.ico”指定了正确的文件位置,文件存在于根目录中。
参考上文,是否有其他可能的原因可以避免chrome清除会话变量?
答案 0 :(得分:1)
在输出任何HTML内容/任何内容之前,使用PHP重定向用户:
<?php
if (!($_SESSION['userid'])){
header('Location: login.php');
}
请注意,在HTTP 1.1中,Location
标头必须是绝对URI,但我认为从那时起它就被修改了。尽管如此,它适用于所有主流浏览器。
答案 1 :(得分:0)
你的会话超时怎么样,你甚至设置了这个参数吗?
尝试阅读此答案PHP Session timeout