我遇到了一个非常奇怪的php会话功能问题。
首先:它仅适用于某些浏览器。喜欢随机选择:Windows上的FF,但不适用于Mac,两个平台上的Chrome,但是safari并不适用于IE。
我有一个登录脚本,如果登录数据正确,我会创建一个会话:
session_start();
$_SESSION['username'] = $user_info['username'];
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
当我在登录脚本中执行print_r时,在设置会话变量之后,它适用于所有浏览器。但在将用户重定向到主站点后,某些浏览器的会话为空....
我从未遇到过这样的问题,我真的不知道该怎么做......
答案 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将保持空白,如果我已登录,则会在稍后使用该用户名进行检查。然后我使用用户名,时间等更新数据库。