0

我写了一个带有登录机制的 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清除session变量吗?

4

2 回答 2

1

在输出任何 HTML 内容/任何内容之前使用 PHP 重定向用户:

<?php

if (!($_SESSION['userid'])){
    header('Location: login.php');
}

请注意,在 HTTP 1.1 中,Location标头必须是绝对 URI,但我认为从那时起它已被修改。尽管如此,它适用于所有主要浏览器。

于 2013-08-19T04:27:50.543 回答
0

你的会话超时呢,你甚至设置了这个参数吗?

尝试阅读这个答案PHP Session timeout

于 2013-08-19T04:38:38.317 回答