2010-02-01 28 views
0

我有一個登錄表單,我有一個用戶名,密碼和一個記住我單選按鈕選項。現在我需要它,以便當我從主頁註銷後,再次嘗試登錄時,無需詢問用戶名和密碼,我登錄,因爲我將存儲用戶名和密碼值到cookie中。當我點擊'記住我'並退出後,當我再次嘗試登錄時,Cookie未被檢索

我password_match.php頁面(登錄頁面的操作頁面)

$con=mysql_connect("localhost","root",""); 
if(!$con) 
{ 
die('Could Not Connect:'.mysql_error()); 
} 

mysql_select_db("tcs",$con); 

if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])) 
{ 
$usr = $_COOKIE['cookname']; 
$pwd = $_COOKIE['cookpass']; 
$pwd=hash('sha1',$_POST['password']); 
} 

else 
{ 
$usr=$_POST["username"];     
$pwd=hash('sha1',$_POST['password']);   
} 

上編寫代碼通過這個代碼,我檢查是否有與cookname和cookpassword包含用戶名和密碼的餅乾。如果沒有找到該名稱的cookie,則直接從文本框中檢索用戶名和密碼(如果用戶輸入的話)。

現在這我會寫會設置一個cookie,如果用戶名和密碼存在代碼:

如果($結果) { $行= mysql_fetch_array($結果);

if (($row["Username"]==$usr) && ($row["Password"]==$pwd)) 
{ 
    if(isset($_POST['remember'])) 
    { 
    setcookie("cookname", $row['Username'], time()+60*60*24*100, "/"); 
    setcookie("cookpass", $row['Password'], time()+60*60*24*100, "/"); 
    } 


$_SESSION['employee']['id']=$row['User Id']; 
    $_SESSION['employee']['username']=$row['Username']; 

    header ("Location: home_page.php"); 

}

現在開始的時候,當我輸入用戶名和密碼,如果這些都正確顯示一個cookie必須已設置好,如果我現在退出,並嘗試在形式上相同的符號,如據我說,它應該收回餅乾,但沒有在這裏開心。我無法實現它。我哪裏錯了?

+1

不要將密碼存儲在cookie中。這是一個非常糟糕的主意。你根本不需要存儲他們的登錄信息。只需登錄他們,然後將其標記爲授權,然後檢查。當然要安全。 – 2010-02-01 02:36:48

+0

你會詳細告訴我PLZ .. – 2010-02-01 02:57:21

+0

請參閱下面的答案。按照該文章創建2個Cookie。 1是正常的cookie,1是持久的,有很長的到期時間(一年或更長)。 – 2010-02-08 03:36:39

回答

1

下面是簡單系統的簡要概述。創建一個表,看起來像:

auth_token { user_id int, token varchar(...) }

當用戶點擊「記住我」創造一個獨特的,不可能被猜到的標記,並將其存儲在auth_token表與相關user_id一起。將token保存爲cookie。

現在在一些common.inc.php文件(即,包含在每個頁面中)中,檢查cookie中的該散列值(如果該人當前未登錄)。如果該cookie包含有效散列,則自動將該人登錄爲該用戶。

有些事情要考慮:

  • 你可以配合cookie來一個IP地址範圍
  • 你可以擁有它之後的天X號
  • 你可以把一個自動登錄的到期一個「軟登錄」並要求在被認爲不安全的第一個操作上輸入密碼

只有當用戶點擊「註銷」鏈接時,纔會從計算機中刪除cookie。或者,您可以有一個「Log Me Out of Every Location」,您可以從與該用戶關聯的數據庫中刪除所有散列。

但無論你做什麼,都不要在cookie中存儲用戶名或密碼。這是一個重大的安全漏洞。

+0

我只是新的PHP和我不是那麼專業,將瞭解所有這些事情PLZ告訴我在上面的代碼中我錯了 – 2010-02-01 03:21:12

1

好了,我的設計還記得我的Cookie在我的網站根據這篇文章:http://jaspan.com/improved_persistent_login_cookie_best_practice

你應該看它知道如何設計的永久性cookie,並防止被盜餅乾從肆虐用戶的數據。

在我的應用程序中,使用永久cookie進行登錄的用戶僅限於查看操作。將更改數據的操作需要用戶使用登錄表單登錄。更像雅虎郵件中使用的那種。