2012-06-05 105 views
1

試圖添加「保持登錄狀態」。不完全知道我在做什麼錯的,但在初始登錄時「保持我登錄」被選中,這將運行:Cookie不會設置讓我登錄。PHP

$email_and_password = array($email_from_html, $pass_from_html); 
setcookie("StayLoggedZod", $email_and_password, time()+3600*24*30); 

$ email_from_html & $ pass_from_html是用戶的電子郵件地址和密碼被存儲到一個數組並存儲到一個cookie中。

現在,當你回到現場後離開,初始頁面做到這一點:

if (isset($_COOKIE['StayLoggedZod'])) 
{ 
$email_and_password = $_COOKIE['StayLoggedZod']; 
$stored_email = $email_and_password[0]; 
$stored_password = $email_and_password[1]; 
//USES THE E-MAIL AND PASS STORED IN HERE TO LOG INTO WEBSITE VIA MySQL DB, I EXCLUDED THIS CODE BECAUSE I KNOW THIS PART WORKS. 
} 
else 
{ 
header("location:login.php"); 
} 

它返回沒有任何錯誤,我無法得到它的工作,所以我做了一個簡單的測試頁面這樣:

$cookie_data = $_COOKIE['StayLoggedZod']; 
$the_email = $cookie_data[0]; 
$the_pass = $cookie_data[1]; 
$display_string = "This is my email".$the_email.". This is my password".$the_pass; 
echo $display_string; 

除「這是我的電子郵件」等數據外,沒有任何數據顯示。

這是我第一次讓我保持登錄,不知道我錯過了什麼,希望我對我的解釋徹底。 -Mike

+1

請不要告訴我你在cookie中存儲密碼。 – PeeHaa

+0

不是當我使用它時,我只是試圖在改變很多東西之前讓它工作,我將生成一個唯一的ID而不是密碼,並將其存儲在數據庫中,並將其用作參考。 – user1053263

回答

2

1)你不應該在Cookie中存儲敏感細節,如密碼。 Cookies是存儲在客戶端和可編輯和可視

2)檢查手冊頁的setcookie http://php.net/setcookie

,你會看到第二個參數(即要存儲的值)應該是一個字符串(所以,如果你想存儲陣列想將它們存儲像序列化或JSON字符串,編碼的方法)的

+0

我絕對不會改變存儲的密碼,並使用存儲在cookie中和DB和引用,而不是密碼,我只是試圖讓這之前,我改變了周圍的東西很多工作產生的唯一的ID。我不知道它必須是一個字符串,現在對它進行不同的編碼。謝謝! – user1053263

+1

@ user1053263好吧,我很高興它有幫助。但我想,通常你說的話,好像要複製這個系統 – mishu

+0

我已屆工作的用戶認證通過會話處理,系統自動存儲會話ID(在cookie中是最常見的選擇)和在服務器端,它只是一旦你離開了瀏覽器,會話被破壞,我的朋友成了惱火,它就是爲什麼我在添加此。 – user1053263

1

試試這個:

setcookie("StayLoggedZod", serialize($email_and_password), time()+3600*24*30); 

和調用:

$email_and_password = unserialize($_COOKIE['StayLoggedZod']); 
+0

立即嘗試此操作。 – user1053263

0

持久登錄cookie的第一條規則是:do 不是將cookie存儲在cookie中!

相反,使用用戶名和隨機標記(來自適當的大空間)生成一個cookie,將該隨機標記存儲在用戶表中。

當提出該cookie,用戶名和令牌組合擡頭:

  • 如果組合匹配,用戶已登錄;一個新的令牌生成和保存,cookie將被更新
  • 如果組合不匹配,cookie將被忽略

當用戶會話已經開始爲「記住我」的cookie的結果,你在訪問敏感信息(如個人身份信息)時應提示輸入密碼。

這個處理受損cookie的流程有所改進,概述了here