2

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

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

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

如果会话已过期,我将无法让某人获得访问权限。

谢谢

4

1 回答 1

5

这些是 ASP.NET 中的 3 个不同的概念:

  • ASP.NET 会话
  • 表单认证
  • 会员提供者(在您的情况下为简单会员)

这 3 个可以单独使用,并且它们之间没有任何依赖关系。我将尝试分别描述它们:

  • ASP.NET 会话 - 为您希望在各种 HTTP 请求之间保留的一些信息提供服务器端存储。服务器上有 3 种开箱即用的存储类型:InProc、StateServer 和 SQLServer。客户端上有一个 cookie,它只包含会话的标识符,以便在服务器上可以从相应的存储中检索正确的数据。您可以在此处阅读有关 ASP.NET 会话的更多信息:http: //msdn.microsoft.com/en-us/library/ms178581 (v=vs.100).aspx

  • 表单身份验证 - 用于跟踪经过身份验证的用户。当前经过身份验证的用户存储在 cookie 中。实际上,他的加密用户名存储在表单身份验证 cookie 中,并在每个请求中传递。该User.Identity.IsAuthenticated属性由 FormsAuthenticationModule 从该 cookie 的值填充。您可以在此处阅读有关表单身份验证如何工作的更多信息:http: //msdn.microsoft.com/en-us/library/ff647070.aspx

  • Simple Membership Provider -MembershipProvider使用 SQL Server 存储成员用户的 ASP.NET 实现。

在 ASP.NET MVC 中,这些概念的工作方式与经典 ASP.NET WebForms 中的相同。唯一的区别是您可以使用该Authorize属性装饰您的控制器操作,以确保只有经过身份验证的用户(那些提供了有效表单身份验证 cookie 的用户)才能访问该操作。

于 2013-08-06T15:01:19.577 回答