PHP 会话变量随机取消设置


PHP Session Variable Randomly Unsets

我有一个PHP会话,我用它来管理我的网站的管理面板。这使用两个变量来监视会话,lastActionuser。最近,在我网站的某个特定页面上,会话变量user将随机完全取消设置并将用户发送回登录页面,但我似乎无法弄清楚原因。

session_start();
$fn = "timeout.txt";
$fh = fopen($fn,'r');
$to = fread($fh,filesize($fn));
if(abs(time()-$_SESSION["lastAction"]) > $to)
{
    session_unset();
    die("Timeout");
}
var_dump($_SESSION);
//Set timeout back to 0
$_SESSION["lastAction"] = time();
if($_SESSION["user"] != "...")
{
    die("Invalid User");
    header("Location:/login");
}

我从未收到超时错误,只有无效用户错误。

有时,当我转储会话变量时,我会得到两个值的数组,lastActionuser ,但是,只需几秒钟后重新加载页面,user就会取消设置,但lastAction没有。

另外,在这种情况下,我正在通过javascript重新加载页面:parent.location='';

关于可能导致这种情况的原因的任何想法?

这很可能与您的标头有关。会话变量仅在设置它们的域中是好的。例如,如果您在 www.example.com 中设置了会话变量,但随后您的标头重定向到 example.com ,您将没有要使用的会话变量,就像您重定向到 mobile.example.com 一样。更改我在代码中看到的相对路径,看看这是否是导致它的原因。