会话未保存到整个站点


Session not saving for whole site

php会话函数出现了一个非常奇怪的问题。

首先:它只适用于某些浏览器。就像随机选择的:FF在windows上,但不在Mac上,Chrome在两个平台上,safari不工作IE。

我有一个登录脚本,如果登录数据正确,我会在其中创建一个会话:

session_start();
$_SESSION['username'] = $user_info['username'];
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

当我在登录脚本中进行print_r时,在设置会话变量后,它适用于所有浏览器。但在将用户重定向到主站点后,某些浏览器的会话是空的。。。。

我从来没有遇到过这样的问题,我真的不知道该怎么办…

session_start();
$_SESSION['username'] = $user_info['username'];
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

如果这是每个页面的开始,我可以理解你在刷新后再也看不到任何东西了,因为简单地说,你所做的就是启动会话,用变量Username将$_session变量Username设置为$User_info。你每次都这么做。

但是考虑一下:此时根本没有指定您的变量。也许你在登录时设置了它,但是,你在下次刷新时会在脑海中清除它,因为你告诉它再次使用$user_info['username]。在这种情况下,手头没有任何调用,它将是一个空变量。因此,您的用户名将为空。

您的会话['username']也将是空白的,因为您告诉它接受这些信息。

由于您在登录时设置了它,因此无需重新指定,因为您的会话[用户名]已设置

编辑

所以我现在问,你在数据库里放了什么?是否将SessionId保存在数据库中?因为那样你就可以做出这样的东西。

session_start();
$Session=session_id();  
$result1 = LoadSessionData($Session);
$count=mysqli_num_rows($result1);
if($count=="0"){
    $Time=time();
    $Ip = $_SERVER['REMOTE_ADDR'];
    StartSessionData($Session,$Time,$Ip);
    $_SESSION['Username'] = '';
}else{
    while ($row1 = mysqli_fetch_array($result1)){       
        $UserName = $row1['GebruikerNaam'];
        if ($UserName == ""){
            $_SESSION['Username'] = '';
        }
        $Time=time();
        $Time_check=$Time-3600;
        $Ip = $_SERVER['REMOTE_ADDR'];
        OnlineChecker($Session,$UserName,$Time,$Ip);
    }
}

我希望你能理解,但我会尽力解释的。它检查sessionId是否在数据库中,如果不在,则将会话id与时间戳、ip和会话用户名一起添加到数据库中,设置为空。

否则,我会检查我得到的信息,如果它有用户名,就用它。如果它为空,sessionusername将保持为空,因为如果我登录,它稍后会使用该用户名进行检查。然后我用用户名、时间等更新数据库。