2012-06-22 44 views
1

如何在數據庫中安全地存儲用戶名,而不直接將它們添加到cookie值?PHP&MySQL用戶名存儲和cookie

實施例: 我想顯示登錄的用戶的用戶名。 如果他早點關閉了瀏覽器,唯一的方法就是使用$ _COOKIE ['cookie name'] ,其中cookie值與數據庫中的用戶名鏈接。 所以我不需要散列用戶名。

是不是?如果它是正確的,它是否安全?

回答

2

下面是假設你是談論使用cookie的持久登錄功能。爲了記住用戶名(但不是自動簽名),在cookie中有一個用戶名(可選擇編碼)應該沒問題。無論如何,密碼不應該在cookie中。


餅乾不應該直接識別,即用戶ID /名字不應出現在cookie。相反,您應該爲表中的用戶分配足夠長的足夠長的字符串和隨機數據,並將其存儲在cookie值中。一旦使用,你應該更新字符串併發出另一個cookie。

例如:

john | ewojroj1234ojqewor 
jack | ljqwelkn1k31n23k33 

第二列將被放置在該cookie。以後你會查詢該值對用戶表和:

  1. 獲取會話內的用戶數據和存儲
  2. 重新生成隨機字符串
  3. 問題的另一種餅乾

更改密碼和簽名out也應該導致用戶令牌字符串的改變。

爲了進一步閱讀,Barry Jaspan在這個方法上寫了一個good article

+1

用戶登錄後每次生成第二列的最佳方式是? – treng

+1

我假定存儲cookie的使用是爲了讓用戶在稍後階段重新打開瀏覽器,輸入密碼並進行身份驗證。這需要這些混亂的字符(以識別用戶)以及發送到服務器的密碼。如何知道用戶名的不同之處在於知道這些混亂的字符使它更安全? –

+0

@EdHeal @EdHeal在推薦的情況下,我認爲OP需要一個持久登錄功能(即沒有密碼) –

3

這是安全的。只是不要在客戶端(瀏覽器)上存儲密碼。也不要將密碼發送到瀏覽器。

1

要做到這一點,最好的方法是將用戶表的user_id(唯一標識主鍵)存儲在$ _COOKIE或$ _SESSION變量中 - 可能在$ _COOKIE ['user_id']中。

然後在每個頁面加載時,您可以使用該ID從數據庫中檢索您希望的任何用戶信息。例如(請注意,這是概念上的/只僞代碼,當然你會消毒/清潔/驗證/綁定$ _COOKIE或$ _SESSION數據參數第一。):

SELECT * FROM user_table WHERE user_id = $_COOKIE['user_id']

3
  1. 您可以將用戶名存儲在cookie中,只要您沒有在那裏保存密碼,這是安全的。

  2. 您也可以在那裏保存用戶ID,那麼它不會放棄任何驗證細節,同時讓您找到正確的用戶。使用sessions。存儲在$_SESSION中的數據存儲在服務器上,而不是在客戶端上。