2013-08-06 38 views
2

我在我們的MVC 4項目中使用簡單會員,這會按預期創建會話,但會話過期後似乎用戶信息仍然存在。MVC 4與會話的簡單會員混淆

例如20分鐘後,如果User.Identity.IsAuthenticated == true仍然有效,但我的會話變量全部爲空。

有人可以告訴我爲什麼會發生這種情況嗎?這個cookie是否被管理?是否有必要做一些其他的檢查,而不是如果User.Identity.IsAuthenticated == true?

如果他們的會話已過期,我不能讓某人獲得訪問權限。

感謝

回答

5

這些都是在ASP.NET中3個不同的概念:

  • ASP.NET會話
  • 窗體身份驗證
  • 會員提供商(你的情況simplemembership)

這3個可以單獨使用,但它們之間沒有任何依賴關係。我會盡量單獨形容它們:

  • ASP.NET會話 - 提供你想要的各種HTTP請求之間持久存儲的信息的服務器端存儲。開箱即用的服務器上有三種類型的存儲:InProc,StateServer和SQLServer。客戶端上有一個cookie,其中只包含會話的標識符,以便在服務器上可以從相應的存儲中檢索正確的數據。您可以在此處閱讀有關ASP.NET Session的更多信息:http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx

  • 表單身份驗證 - 用於跟蹤經過身份驗證的用戶。當前經過身份驗證的用戶存儲在cookie中。實際上,他的加密用戶名存儲在表單身份驗證Cookie中,並在每個請求上傳遞。 User.Identity.IsAuthenticated屬性由FormsAuthenticationModule從此Cookie的值填充。使用SQL Server的成員資格用戶的存儲ASP.NET MembershipProvider實現 - http://msdn.microsoft.com/en-us/library/ff647070.aspx

  • 簡單的會員提供者:你可以閱讀更多有關窗體身份驗證如何在這裏工作。

在ASP.NET MVC中,這些概念的工作方式與傳統ASP.NET WebForms中的相同。唯一的區別是,您可以使用Authorize屬性修飾您的控制器操作,以確保只有經過身份驗證的用戶(提供了有效表單身份驗證Cookie的用戶)才能訪問該操作。

+0

謝謝Darin。這確實回答了我的問題。因此,如果會話狀態由於超時而被清除,並且我想讓用戶再次登錄,是否有一種簡單的方法來處理您所瞭解的問題? –

+1

如果SimpleMembership不依賴Forms Authentication,那麼WebSecurity.CurrentUserId屬性如何知道當前用戶? –