我遵循了this question关于如何实现自定义的建议IPrincipal
(我需要将其存储userId
在其中以减少对数据库的调用以获得公正userId
)。
现在,如果我登录到站点并离开它大约 20 分钟,请不要在站点上执行任何操作并刷新页面,它会再次请求登录。
自定义实现的 IPrincipal 是否有一些过期时间,如果它有如何扩展它?
问问题
422 次
1 回答
1
IPrincipal
只是任何实现类必须遵守的合同。
超时确实取决于实现,但 ASP .NET 应用程序的一个重要考虑因素应该是 formsAuthentication 超时值。
这将是 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 回答