2010-07-01 104 views
7

這裏新增了php會話。我存儲的用戶數據非常小,並且不是很敏感,但我當然還想要一個安全的站點。我已經將他們的密碼哈希存儲在我的db中。在PHP會話中存儲用戶密碼常見嗎?

我是否需要使用他們的密碼在我的網站的每個頁面上驗證用戶,還是那種矯枉過正?換句話說,如果他們已經成功「登錄」,並且我已經將他們的用戶名保存在一個php會話中,那麼他們可以漫遊,這個站點知道他們是誰?

我問,因爲它似乎像在會話中存儲用戶密碼可能不是最好的主意。真的嗎?

回答

8

你不需要身份驗證在每次請求,但你確實需要授權在每次請求

驗證是您驗證用戶對數據庫的用戶名/密碼的地方。一旦他們成功通過認證,您只需要在會話中存儲他們的用戶ID(或用戶名)。

對於每個後續請求,請檢查以確保當前會話爲授權以查看請求的內容。在你的情況下,你可能只需要確保會話中有一個有效的用戶ID ......你不必對數據庫做任何事情。

您可以使用類似的功能如下授權在每次請求:

function isAuthorized() { 
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0); 
} 

您可以更加安全通過在數據庫中管理自己的會話數據使這個,然後你不必非常相信cookie可以被(惡意)用戶交易/竊取等。但是對於大多數Web應用程序來說這通常是過度的。

2

我不會在會話中存儲密碼,您可以將他們已登錄的會話存儲在會話中。

$_SESSION['uerlogged'] = $mytoken; 

然後查看每個頁面加載檢查,如果$_SESSION['userlogged']設置。

您可能還需要考慮增加防範措施會議喜劫持看看 - PHP: Preventing Session Hijacking with token stored as a cookie?

+0

哎呀,對不起,覆蓋... – Piskvor 2010-07-01 15:29:45

5

不要存儲密碼。相反,存儲一個可以在單獨的表中檢查是否存在的身份驗證令牌。

1

實際上並不需要在會話中存儲密碼。您應該有狀態標誌以顯示它們是否當前通過身份驗證以及某種定義用戶身份的對象以及有關它們的信息。

0

在會話中存儲密碼與用戶登錄後在會話中存儲用戶名無異,因此不要存儲密碼。

它只是作爲存儲的用戶名,這是足夠的(即使一個標誌將)。

0

用戶不能修改會話,您只能在那裏存儲用戶名並相信它永遠是正確的。