2012-03-01 30 views
3

有沒有一種很好的方法來使服務器上的表單身份驗證會話無效?註銷後表單身份驗證會話有效

據我所知,該cookie有一個嵌入式過期,但我想在服務器上做一個額外的檢查,以驗證用戶沒有手動退出。當用戶手動註銷時,我會撥打FormsAuthentication.SignOut(),這會使Cookie過期。但是,如果我使用開發人員工具將cookie設置恢復爲原始值,我仍然登錄。

我能想到的一個選項是將「登錄ID」嵌入票證的UserData部分。通過這個,我的意思是每個登錄都記錄在一個數據庫中,並且有一個與它關聯的ID。當用戶手動註銷時,我可以更新數據庫記錄以顯示他們已經這樣做。然而,這需要我每次用戶被認證時都要查詢數據庫(不理想)。我可以保持一個緩存,但它似乎會是很多工作,我希望有一個更簡單的方法:)

謝謝!

回答

3

MSDN documents the limitations。要點:使用服務器上的持久性存儲來記錄用戶何時退出Web站點。

+0

不完全是我所希望的,但我認爲你是正確的。謝謝:) – dana 2012-03-01 21:20:42

2

存儲「登錄ID」的替代方法是更新用戶記錄中的「登錄狀態」字段。

您在用戶登錄時將其設置爲「已登錄」。 您將其與FormsAuthentication.SignOut一起設置爲「已註銷」。

然後,在處理管道的早期某處,您可以檢索用戶記錄(稍後您可能仍然需要它!)並檢查標記。如果該標誌是「已註銷」,那麼出現了問題,並且用401(或另一個代碼來表示認證問題)結束請求。

當然,還可以使用短的cookie過期時間以及滑動過期和SSL。這並不能防止cookie被自己劫持,但降低了別人重複使用cookie的風險。

+0

感謝您的提示。這裏的缺點是,如果用戶使用多個瀏覽器登錄(理論上可能),他們可能會遇到一些奇怪的行爲。 – dana 2012-03-01 21:21:45