1

我遵循了this question关于如何实现自定义的建议IPrincipal(我需要将其存储userId在其中以减少对数据库的调用以获得公正userId)。
现在,如果我登录到站点并离开它大约 20 分钟,请不要在站点上执行任何操作并刷新页面,它会再次请求登录。

自定义实现的 IPrincipal 是否有一些过期时间,如果它有如何扩展它?

4

1 回答 1

1

IPrincipal只是任何实现类必须遵守的合同。

超时确实取决于实现,但 ASP .NET 应用程序的一个重要考虑因素应该是 formsAuthentication 超时值。

http://msdn.microsoft.com/en-us/library/system.web.configuration.formsauthenticationconfiguration.timeout.aspx

这将是 ASP .NET 在没有用户输入的情况下保持会话打开的时间。之后,它将不保留有关已登录用户的任何信息。大多数 iPrincipal 实现依赖于Context.User.Identity.Name与数据库中的条目匹配。一旦达到 Forms Authentication 超时,该值(和IsAuthenticated== true )状态就会丢失,从而导致请求单独登录。如果您只想简单地延长超时,请先尝试调整该值。

如果您正在寻找长期解决方案(即“让我保持登录”功能),最常见的方法是通过 cookie 向用户的浏览器发送一个令牌,该令牌会在随后访问该站点时进行检查。

通常这里的策略是:-

  • 检查cookie
  • 从 cookie 中提取令牌值
  • 如果找到匹配的用户,自动登录用户并给他们一个 FormsAuthentication 票。

此处有关最佳实践的文章:-

http://jaspan.com/improved_persistent_login_cookie_best_practice

于 2012-10-30T22:01:47.707 回答