2011-06-11 31 views
0

我該如何正確編寫一個腳本來設置cookie來記住用戶的用戶名和密碼,方法是在登錄表單上選中一個複選框?還記得我JavaScript嗎?

此外,如果這可以在PHP中完成,請讓我知道。

+1

也許記住用戶名,但不是密碼。您不需要將密碼存儲在服務器上的用戶表中的任何位置,即使此時需要使用強大的哈希算法(最小值,sha1)對其進行哈希處理。 – 2011-06-11 22:50:54

回答

0

在PHP中,通過使用set_cookie將適當的值從$_SESSION複製到$_COOKIE來爲會話信息(用戶名,密碼)設置一個cookie。當用戶訪問一個頁面時,首先檢查是否存在$_SESSION變量,然後是$_COOKIE變量。如果存在$_COOKIE變量但$_SESSION變量不存在,請將$_COOKIE複製到$_SESSION。 (也就是說,如果用戶選中該框)。

+0

你當然是指'set_cookie',因爲'$ _COOKIE'不是魔術。 – 2011-06-11 22:51:02

+0

是的,當然這就是我的意思......混淆了。 – Ryan 2011-06-11 22:51:53

+1

如果有會話設置,cookie應該做的唯一事情就是指向一個可以重新初始化的已保存(在數據庫中)會話。我不同意客戶需要保存在cookie中的用戶名和密碼。會議不需要保存在其中的密碼,IMO。 – 2011-06-11 22:53:42

0

您可以按照上面提到的@minitech進行操作。然而,將密碼信息存儲在cookie中並不是一個好主意。它可以很容易地從電腦中提取。

您最好生成一次性散列,可以用來登錄一次並將其存儲在cookie中。一旦其使用無效。雖然它不是完全安全的(無論如何,儘可能安全地使用會話,如果您希望它更安全,可以使用https),但不會影響用戶密碼。

用戶經常在多個站點上使用相同的密碼。如果它在一個網站上受到損害,則更容易進入其他網站上的用戶帳戶。

2

存儲密碼記憶東西的最佳方法是將md5哈希與一些瀏覽器特定數據一起存儲。例如,你存儲一個字符串,如

username-4155b1b6e53ad73e06c4c58e709cdeea19915ea84de517500d9ba3280e27cf59 

例如,你可以生成這個字符串在PHP這樣

$string=$username.'-'.md5(substr($http_user_agent, 5, 10)) .md5($password).md5(substr($http_user_agent, 0, 10)); 

我們的目標是使我們的字符串足夠複雜。在登錄階段,我們使用只有我們知道的方法來提取密碼md5。

$somearray=explode('-', $string); 
$username=$somearray[0]; 
$passwordmd5=str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string)); 

,現在,我們可以做我們的數據庫這樣的比較,

select * from users where username='$username' and md5(password)='$passwordmd5'; 

HTTP用戶代理的東西消除了一下cookie字符串的未經授權使用的風險。雖然未經授權的人偷走了cookie,但是他不能在另一個瀏覽器中使用它。如果我們沒有這樣做,那麼具有相同字符串的人可能表現得好像他擁有密碼並且可以作爲我們的真實用戶登錄。

0
$somearray = explode('-', $string); 
$username = $somearray[0]; 
$passwordmd5 = str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string));