我在MVC 4项目中使用simplemembership,这会按预期创建一个会话,但似乎会话到期后用户信息仍然存在。
例如20分钟后,如果User.Identity.IsAuthenticated == true仍然有效,但我的会话变量都是空的。
有人能告诉我为什么会这样吗?这个cookie是管理的吗?是否有必要进行其他检查而不是If User.Identity.IsAuthenticated == true?
如果他们的会话已经过期我无法获得访问权。
由于
答案 0 :(得分:5)
ASP.NET中有3种不同的概念:
这3个可以单独使用,它们之间没有任何依赖关系。我将尝试分别描述每一个:
ASP.NET会话 - 为您希望在各种HTTP请求之间保留的某些信息提供服务器端存储。开箱即用的服务器上有3种类型的存储:InProc,StateServer和SQLServer。客户端上有一个cookie,它只包含会话的标识符,因此在服务器上可以从相应的存储中检索正确的数据。您可以在此处阅读有关ASP.NET Session的更多信息:http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx
表单身份验证 - 用于跟踪经过身份验证的用户。当前经过身份验证的用户存储在cookie中。实际上,他的加密用户名存储在表单身份验证cookie中,并在每个请求中传递。 FormsAuthenticationModule从此cookie的值填充User.Identity.IsAuthenticated
属性。您可以在此处详细了解表单身份验证的工作原理:http://msdn.microsoft.com/en-us/library/ff647070.aspx
简单成员资格提供程序 - 使用SQL Server存储成员资格用户的ASP.NET MembershipProvider
实现。
在ASP.NET MVC中,这些概念的工作方式与传统的ASP.NET WebForms相同。唯一的区别是您可以使用Authorize
属性修饰控制器操作,以确保只有经过身份验证的用户(已提供有效表单身份验证cookie的用户)才能访问该操作。