2017-10-14 115 views
1

我使用具有令牌的cookie创建了脚本。它的工作是让我知道用户是否登录,但我不知道为什么它总是返回false。我检查了我的数据库,每次登录时都会创建一条新记录,但我的PHP文件始终返回false。我使用本地服务器easy php。第一个标记在7天内死亡。第二个在3天内死亡。从Cookie中读取错误的错误

<?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

您必须使用超全局变量$_COOKIE。你的例子使用$_cookie。变量名称区分大小写,因此这些变量是不同的。

$_COOKIE is one of the Predefined Variables in PHP.

其次,你可以检查你的Cookie在浏览器选项卡ApplicationsCookie。在该选项卡中查找与键值对应的值SNID

+0

我收到了一个新错误;致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL中有错误句法;检查与您的MySQL服务器版本相对应的手册,以便在C:\ Users \ Desktop \ socialnetwork \ classes \ DB.php:11堆栈跟踪:#0 C \ socialietwork \ classes \ DB.php(11):PDOStatement-> execute(Array)#1 C:\ socialnetwork \ index.php(7):DB :: query('SELECT user_id ...',Array)#2 C :\ socialnetwork \ index.php(29):isloggedIn()#3 {main}抛出C:\ Desktopclasses \ DB.php在第11行 –

+0

感谢您的时间。 –

+0

你有令牌:=你需要写令牌的令牌=:令牌 –