MVC 4 Simplemembership与Session混淆

时间:2013-08-06 14:00:47

标签: asp.net-mvc-4 simplemembership

我在MVC 4项目中使用simplemembership,这会按预期创建一个会话,但似乎会话到期后用户信息仍然存在。

例如20分钟后,如果User.Identity.IsAuthenticated == true仍然有效,但我的会话变量都是空的。

有人能告诉我为什么会这样吗?这个cookie是管理的吗?是否有必要进行其他检查而不是If User.Identity.IsAuthenticated == true?

如果他们的会话已经过期我无法获得访问权。

由于

1 个答案:

答案 0 :(得分:5)

ASP.NET中有3种不同的概念:

  • ASP.NET会话
  • 表单身份验证
  • 会员提供商(在您的情况下简单会员)

这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的用户)才能访问该操作。