我使用带有令牌的cookie制作了一个脚本。它的工作是让我知道用户是否登录但我不知道为什么它总是返回false。我检查了我的数据库,每次登录时都会创建一条新记录,但我的PHP文件总是返回false
。我正在使用本地服务器 easy php 。第一个令牌在7天内死亡。第二个人在3天内死亡。
<?php
include('./classes/DB.php');
function isloggedIn(){
if(isset($_cookie['SNID'])){
if(DB::query('SELECT user_id FROM login_tokens WHERE token:=token', array(':token'=>sha1($_cookie['SNID'])))){
$userid = DB::query('SELECT user_id FROM login_tokens WHERE token:=token', array(':token'=>sha1($_cookie['SNID'])))[0]['user_id'];
if(isset($_cookie['SNID_2'])){
return $userid;
}else{
$cstrong = True;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
DB::query('INSERT INTO login_tokens VALUES(null, :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$userid));
DB:query('DELETE FROM login_tokens WHERE token:=token', array(':token'=>sha1($_cookie['SNID'])));
setcookie("SNID", $token, time()+60*60*24*7, '/', NULL, NULL, TRUE);
setcookie("SNID_2", $token, time()+60*60*24*3, '/', NULL, NULL, TRUE);
return $userid;
}
}
}
return false;
}
if (isloggedIn()){
echo 'logged in ';
echo isloggedIn();
}else{
echo 'not logged in ';
}
?>
答案 0 :(得分:1)
您必须使用超全局变量$_COOKIE
。您的示例使用$_cookie
。变量名称区分大小写,因此它们是不同的变量。
$ _ COOKIE是PHP中的Predefined Variables之一。
其次,您可以在浏览器标签Applications
Cookie
中查看您的Cookie。在该标签中查找与密钥SNID