2010-09-30 57 views
0

什麼是存儲用戶ID或用戶名的最佳方式,以便他們不必每次都登錄?PHP和cookies

如果存儲的ID或用戶名與存儲在數據庫中的ID相比較,我想將用戶轉發到成員頁面。

使用cookie可以安全地做到這一點,我該怎麼做?

+0

那是什麼培訓班是由,看到更多的http://www.php.net/manual/en/book.session.php – Hannes 2010-09-30 14:32:32

+1

@Hannes沒有,則不是了點。 – 2010-09-30 14:35:07

+0

不要爲此使用會話。 – 2010-09-30 14:49:19

回答

2

不要將他們的用戶名或密碼存儲在cookie中。始終假定互聯網上的每個人都可以看到個人計算機上的每個cookie。你應該做的是保存session_id和他們從你的MySQL表訪問的IP地址,然後將session_id保存到cookie中。大多數瀏覽器在關閉窗口時會清除會話變量,但它們不會清除cookie。因此,您首先檢查會話(他們當前是否登錄),如果他們沒有登錄,那麼您檢查cookie(以前登錄過,更重要的是它是否來自此IP地址?)

當然,如果他們有一個session_id,但他們沒有在正確的IP地址,讓他們登錄。他們可能只有一個ISP動態IP,或者他們可能一直在聽網絡流量,他們試圖進入admin用戶沒有密碼。

1

此功能應該是可選的,讓人們從網吧等登錄,而不是讓他們的數據公開給大家。

是的。 Cookie是標記瀏覽器的唯一可能方式。
你必須存儲一些uniqie和不可預知的價值。從用戶數據中生成一些哈希值,並將其與其他用戶數據一起存儲在數據庫中,並將其設置爲cookie

-1

通過我的網站,我使用自定義的書面Session類。這會將sess_id和sess_hash存儲在cookie中,該cookie對當前用戶是唯一的。 IP地址也存儲在數據庫中,並根據當前的IP進行檢查以確認它是同一臺計算機,但這不是主要的認證機制。數據然後被存儲,序列化並base64'd在數據庫中。我建議不要使用PHP會話,因爲任何具有該ID的用戶都可以訪問它們。例如,有人發佈了一個PHPSESSID鏈接,可以讓他們登錄到他們的賬戶。

+0

PHP會話在默認情況下不會在鏈接中傳遞ID。你的建議是基於無知。你必須更好地學習這個話題。事實上,您的方法更容易受到會話固定的影響,因爲它似乎永遠保持相同的ID – 2010-09-30 14:53:43

+0

PHP會話有時會在URL中傳遞該ID。我從來沒有想過爲什麼它偶爾會這樣做。我懷疑它與瀏覽器中的Cookie支持有關。 – 2010-09-30 14:55:10

+0

ID對於每個登錄和每個會話都是順序唯一的。散列是一個UUID。所以除了蠻力攻擊和/或旁道攻擊(例如在UUID不是隨機的)之外,它不容易受到攻擊。) – 2010-09-30 14:57:04

0

最安全的方法是從瀏覽器中請求一個有效的SSL證書,並驗證用戶代理證書服務器是雙面的。但是,在任何瀏覽器中,我都看到安裝此類證書對用戶來說是一個足夠大的難題,因爲它可能不適合公共網站。但有時可以在內聯網中看到。