【发布时间】:2015-08-23 23:39:57
【问题描述】:
我编写了以下脚本。一切都在我的应用程序中工作,除了验证不断返回登录。但是我已经阅读了很多关于我的问题的内容,一切似乎都是正确的,但当然应该有问题,否则它会正常工作。
在我的情况下,用户登录时,令牌存储在数据库和 cookie 中。 对于我使用的令牌的创建:
bin2hex(openssl_random_pseudo_bytes(16));
我接下来要做的是设置一个页面,首先检查 cookie 令牌和数据库中的令牌是否匹配。可以肯定的是,我首先对它们都进行了呼应,并且都给出了相同的标记。我是这样做的:
include 'mydatabase.php';
$cookie_name = "My_cookiename";
$result = mysql_query("SELECT * FROM users WHERE token='{$_COOKIE[$cookie_name]}'");
while($row = mysql_fetch_array($result)) {
echo $row['token'];
echo $_COOKIE[$cookie_name];
}
好的,所以我确定此时 cookie 令牌和数据库令牌匹配。
现在我想将它们与if/else 进行比较。在这里我出错了,因为我无法让它工作。我现在拥有的是这样的:
$result = mysql_query("SELECT * FROM users WHERE token='{$_COOKIE[$cookie_name]}'");
while($row = mysql_fetch_array($result)) {
if ($row['token'] != $_COOKIE[$cookie_name]) {
header('Location:myloginpage.php'); exit(); } else { // MY PAGE CONTENT IF MATCH }
我认为这行有问题:
if ($row['token'] != $_COOKIE[$cookie_name])
任何帮助都会很棒,因为我真的被困在这一点上。
【问题讨论】:
-
你是在用setcookie设置cookie值吗?
-
如果您得到与 cookie 匹配的令牌的返回值,则您不应该需要
if。是否有任何错误被抛出? -
这没有多大意义。您正在从数据库中选择 A 等于 B 的行,然后检查结果以查看 A 是否仍然等于 B。您肯定想检查是否有任何匹配项?例如mysql_num_rows
-
是的,我使用 setcookie 来设置 cookie 值。奇怪的是,当我将它修改为
$result = mysql_query("SELECT * FROM users WHERE token='{$_COOKIE[$cookie_name]}'"); while($row = mysql_fetch_array($result)) if ($row['token'] != $_COOKIE[$cookie_name]) { echo "no match"; } else { echo "match"; }时,当 cookie 和 db 匹配时,我得到了正确的回显。如果我修改数据库中的令牌,那么我根本没有回声,只是一个空白页。使用 error_reporting all 我完全没有错误:(