如何将 cookie 与数据库中的 token 进行匹配?
How to match cookie with token in database?
我写了下面的脚本。在我的应用程序中一切正常,除了验证不断返回登录。但是我已经阅读了很多关于我的问题的信息,一切似乎都是正确的,但当然应该有问题,否则它会正常工作。
在我的例子中,用户登录时,令牌存储在数据库和 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])
任何帮助都会很棒,因为我真的被困在这一点上。
正如对你问题的评论所说,你在检查不必要的东西。 mysql 查询本身会为您进行令牌检查
include 'mydatabase.php';
$cookie_name = "My_cookiename";
$result = mysql_query("SELECT * FROM users WHERE token='{$_COOKIE[$cookie_name]}'");
if (mysql_num_rows($results) != 1) {
header('Location:myloginpage.php');
exit();
}
// Content for your page goes here, no need for an else because of exit
我想我刚刚解决了它:D
我遇到了同样的问题,我从我的随机令牌生成器中取出了 &
标志。当我用 htmlentities()
包围 cookie 字符串时,我注意到 &
符号被替换为 &
,因为字符串通常读取 &
作为代码。一旦我从令牌中删除 &
,它就起作用了。希望这有帮助。
我写了下面的脚本。在我的应用程序中一切正常,除了验证不断返回登录。但是我已经阅读了很多关于我的问题的信息,一切似乎都是正确的,但当然应该有问题,否则它会正常工作。
在我的例子中,用户登录时,令牌存储在数据库和 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])
任何帮助都会很棒,因为我真的被困在这一点上。
正如对你问题的评论所说,你在检查不必要的东西。 mysql 查询本身会为您进行令牌检查
include 'mydatabase.php';
$cookie_name = "My_cookiename";
$result = mysql_query("SELECT * FROM users WHERE token='{$_COOKIE[$cookie_name]}'");
if (mysql_num_rows($results) != 1) {
header('Location:myloginpage.php');
exit();
}
// Content for your page goes here, no need for an else because of exit
我想我刚刚解决了它:D
我遇到了同样的问题,我从我的随机令牌生成器中取出了 &
标志。当我用 htmlentities()
包围 cookie 字符串时,我注意到 &
符号被替换为 &
,因为字符串通常读取 &
作为代码。一旦我从令牌中删除 &
,它就起作用了。希望这有帮助。