会话不保存整个站点

时间:2014-10-10 10:16:42

标签: php html apache session

我遇到了一个非常奇怪的php会话功能问题。

首先:它仅适用于某些浏览器。喜欢随机选择:Windows上的FF,但不适用于Mac,两个平台上的Chrome,但是safari并不适用于IE。

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

session_start();
$_SESSION['username'] = $user_info['username'];

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

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

我从未遇到过这样的问题,我真的不知道该怎么做......

1 个答案:

答案 0 :(得分:1)

session_start();
$_SESSION['username'] = $user_info['username'];

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

如果这是每个页面的开始,我可以理解你在刷新后不再看到任何东西,因为简单地说,你做的是你开始你的会话,你用$ username变量用户名设置为$ User_info。你每次都这样做。

但请考虑一下:此时根本没有指定您的变量。也许您在登录时进行了设置,但是,您在下次刷新时会将其清除,因为您告诉它再次使用$ user_info ['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将保持空白,如果我已登录,则会在稍后使用该用户名进行检查。然后我使用用户名,时间等更新数据库。