2010-02-01 57 views
1

我知道這是一個基本問題,所以它應該是一個基本的答案。我一直只使用會話完成用戶登錄系統,現在我想讓它成爲用戶選擇使用cookie時返回到我的網站時保持登錄的選項。我不確定這樣做的最佳方法,但我有一個小樣本的基本功能,我認爲它可能在下面工作。請告訴我,如果這看起來是正確的,或者我應該做的不同。 cookie將最有可能持有的用戶ID和將被重新生成每次他們「登錄」允許從PHP中的cookie驗證站點的最佳方式是什麼?

// see if Session is set 
if (!isset($_SESSION['userID']) || $_SESSION['userID'] == ''){ 

    // session is not set so see if cookie is set 
    if (isset($_COOKIE['userID'])){ 
     //cookie is set so check that it is valid login ID and key 
     // if it returns tru then we will also initiate there session value so they will be logged in 
    }else{ 
     // redirect to login page 
    } 

    if (!isset($_SESSION['userID']) || $_SESSION['userID'] == ''){ 
     // redirect to login page 
    } 

}else{ 
    //user is logged in already 
} 

回答

2

我過去使用的是設置兩個cookie,一個存儲用戶標識,另一個包含驗證用戶標識的校驗和。下面是一個例子:

//store website user id 
setcookie('userid', $userid, time() + 2592000, "/"); 
//store checksum 
setcookie('checksum', md5($userid."F%^WD&*^("), time() + 2592000, "/"); 

校驗和是用戶ID的鹽化MD5哈希,所以它不能被逆向工程改造或改變,以反映另一個用戶標識(在沒有校驗的情況下,人們可以很容易地改變「的userid ' 曲奇餅)。

要恢復會話,你剛纔檢查的餅乾和驗證校驗和(使用相同的「鹽」)反對的userid:

//Restore stored user session 
if (md5($_COOKIE["userid"]."F%^WD&*^(") == $_COOKIE["checksum"]) 
{ 
    //retrieve user again and store in session 
} 
1

你是在正確的軌道上的一些加密的密鑰;這是大多數「記住我」實現工作的方式。

相關問題