2011-05-18 71 views
0

我正在開發一個基本上是數據庫代理的ASP.NET MVC 3應用程序。要登錄,用戶必須提供他們的數據庫用戶和名稱。 (我知道使用數據庫用戶作爲應用程序用戶並不是一個好主意,但我沒有設計數據庫,所以不要責怪我。)以保持會話狀態數據的方式與認證Cookie保持聯繫

當我的用戶登錄時,我想存儲在會話變量中的用戶名和密碼:

Session["UserID"] = TheConnectionStringBuilder.UserID; 
Session["Password"] = TheConnectionStringBuilder.Password; 

然而,會話狀態不固定綁定到身份驗證cookie,並稍後可能會造成問題。有沒有辦法保持會話狀態數據的方式,以保持與身份驗證cookie的關聯?

+0

爲什麼不將該數據存儲在用戶的身份驗證cookie中。在任何地方存儲普通密碼都很不好,但用戶的cookie至少要加密。這樣你可以避免會話劫持問題... – automagic 2011-05-18 22:37:15

+0

你認爲你可能遇到什麼問題? – Kev 2011-05-18 22:38:03

+0

@詹姆斯康奈爾:我該怎麼做? – pyon 2011-05-18 22:38:08

回答

1

其中一種方式可能是使用配置將會話狀態超時與身份驗證超時匹配。例如,

<authentication mode="Forms"> 
<forms timeout="30" /> 
</authentication> 

<sessionState timeout="31" /> 

另一種方法是將存儲憑證到一些持久性存儲(如文件)標記有一些生成的密鑰,然後保持身份驗證Cookie此鍵。但是,我覺得這是一個關於做事的方式,我寧願採用會話方式。

由於某種原因,如果您在會話中找不到用戶標識/密碼(例如,應用程序池回收),則可以強制用戶重新登錄(使用FormsAuthentication.SignOut後跟RedirectToLoginPage)。

+0

該機制仍然存在一個弱點:如果用戶刪除會話狀態cookie,但不是身份驗證cookie,會發生什麼情況? – pyon 2011-05-19 13:39:18

+0

@Eduardo,不是真的,如果用戶刪除會話cookie,那麼會話將過期,並且會觸發條件是最後一個段落,即如果您沒有找到用戶ID /密碼,則強制用戶註銷。您可以將這種檢查按需(即訪問數據庫時)或基本頁/ global.asax中進行檢查。 – VinayC 2011-05-20 04:44:59