我不知道我的cookie发生了什么,我基本上有一个生成随机代码的系统,将其存储在cookie中,也存储在数据库中。当用户重新登录时,以及用户名/密码身份验证,此cookie也必须与数据库匹配才能通过登录阶段(它基本上是一个授权某些计算机访问的系统)。
问题是:基本上,我已经设置了一种方法来在我登录之前检查cookie数据,它只是一个打印我无法登录时可以访问的cookie数据的页面。这位于' /includes/check_cookies.php' ;.我还有主要的登录脚本,用于在任何事情之前读取cookie数据,并查看' auth_code'匹配数据库条目,如果是,允许访问提供用户名和密码是正确的等等,如果它没有,它将生成一个新的' auth_code'并将其存储在表格和cookie中。这取决于用户是管理员还是标准用户,管理员可以在那里授权,然后标准用户也可以。说我现在第一次登录,我是管理员,所以可以授权给自己,并且它有效,我可以退出并顺利回来。但是,如果我今晚回家并明天早上回来,试图登录,我会被告知我的计算机没有再次授权,即使在检查时,cookie条目与我的check_cookies文件中的数据库匹配,但是在登录脚本中生成了一个新的?我非常困惑。
但无论如何,这里是相关代码(我将使用管理代码):
$auth_code = $_COOKIE['auth_code'];
echo $auth_code . "<br>";
// Check Cookie Auth Code Vs Database Auth Code
$auth_query = "SELECT * FROM authorised_computers WHERE auth_code = '".$auth_code."';";
$auth_result = mysqli_query($link,$auth_query);
if($auth_result->num_rows == 0) {
$auth = 0;
} else {
$auth = 1;
}
if($auth == 1) {
setcookie('admin',$admin,$cookie_expire,'/');
setcookie('login_time',$date,$cookie_expire,'/');
$_SESSION['logged_in'] = "true";
header('Location: ../logs.php');
} elseif($auth == 0) {
setcookie('auth_code',$no_generator,$cookie_expire,'/');
setcookie('admin',$admin,$cookie_expire,'/');
setcookie('login_time',$date,$cookie_expire,'/');
$_SESSION['logged_in'] = "false";
header('Location: admin_auth.php');
}
基本上代码是将$ auth设置为&#39; 0&#39;并遵循该路线。
以下是登录脚本中的cookie数据:
Array
(
[auth_code] => 13367320 // Does not match database
[admin] => 1
[acc_id] => 1
[user_id] => 10001
[login_time] => 2015/07/29 10:25:20
)
登录尝试前的Cookie数据:
Array
(
[auth_code] => 342221-32 // Matches the Database
[admin] => 1
[acc_id] => 1
[user_id] => 10001
[login_time] => 2015/07/29 10:25:35
)
基本上,新的身份验证代码不应该已经生成,因为cookie数据已经与数据库匹配,所以应该直接进行。
我有一种感觉,这可能是Cookie过期的问题,但我已将Cookie设置为:$ cookie_expire = time()+(21 * 365 * 24 * 60 * 60);所以他们不应该这样。我可能会遗漏一些明显的东西,但话说回来,我对Cookies的理解并不是最好的。任何帮助将不胜感激!
答案 0 :(得分:0)
检查我的代码后,我发现登录时我正在重新设置cookie代码,因此更改了“cookie代码”,因此它不匹配。我已经删除/重写了登录脚本,并且所有内容似乎都正常工作。只需要在明天早上重新测试它,看看问题是否再次出现。
感谢每个人的投入。