2017-10-14 79 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

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