我遇到的问题是同一个用户正在生成两个会话文件。我开始在数据库中记录这些内容,以便我可以看到发生了什么。我很想知道这是否源于在课堂上设置课程或者是否有一些编程失误。以下是我的计算机在一分钟内生成的会话:
session_id session_data
kfmj13vi5o538mvi57at8th0n2 useradd|s:10:"xx.xx.62.69";redirect|s:10:"/index.php";
3bb0fkisndf3u0o1l3195iclh2 UID|s:1:"1";USERNAME|s:9:"kalpaitch";
有时(并非总是)当用户登录时,负责将“UID”和“USERNAME”添加到会话的类似乎完全创建了一个新会话(如上所述),因此页面不会注册用户已登录。
这是其他人写的脚本,其中包含以下路径=> loginform.php发布到validate.php,它调用下面的方法。
function validateUser($username,$password, $redirect){
$password=md5($password);
if(get_magic_quotes_gpc()){
$username = stripslashes($username);
$password = stripslashes($password);
}
$sql = "SELECT id,username,password FROM users WHERE username='" . mysql_real_escape_string($username) . "' AND password='" . mysql_real_escape_string($password) . "' AND status='1' and verified=1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if ($row["id"]){
session_start();
$_SESSION["UID"] = $row["id"];
$_SESSION["USERNAME"]=$row["username"];
header("location: http://www.xxx.com".$redirect);
}else{
unset($_SESSION["UID"]);
unset($_SESSION["USERNAME"]);
$sql = "select id,username,password from user where username='" . mysql_real_escape_string($username) . "' and password='" . mysql_real_escape_string($password) . "' and status='1' and verified=0";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if ($row["id"]){
$_SESSION['login'] = 'Verify your account by email';
header("location: http://www.xxx.com".$redirect);
}else{
$_SESSION['login'] = 'Incorrect username or password';
header("location: http://www.xxx.com".$redirect);
}
}
}
答案 0 :(得分:2)
很可能这与会话Cookie设置,例如cookie-path或cookie-domain有关,尤其是当您在www.domain.tld
和普通{{1}之间切换时站点;或登录后domain.tld
来电(这实际上是一个好主意,因为它避免了会话固定)。