我遵循了有关如何实现自定义IPrincipal
的建议(我需要它将userId
存储在其中,以减少到数据库的调用以获取userId
)。
现在,如果我登录到网站并将其留出大约20分钟,请不要在网站上做任何事情,然后再次请求登录。
自定义实施的iPrincipal是否有一定的过期时间,如果它有如何扩展?
IPrincipal
只是任何实施类都必须服从的合同。
超时确实取决于实现,但是对ASP .NET应用程序的巨大考虑应该是FormsAuthentication timeout值。
http://msdn.microsoft.com/en-us/library/system.web.configuration.formsauthenticationconfiguration.timeout.timeout.aspx
这是ASP .NET在没有用户输入的情况下保持会话打开的时间。之后,它不会保留有关登录用户的信息。大多数Iprincipal实现都依赖于将Context.User.Identity.Name
与数据库中的条目匹配。表单身份验证超时被击中,丢失了该值(以及IsAuthenticated
== true)状态,从而导致请求单独登录。如果您只想简单地扩展超时,请先尝试调整该值。
如果您正在寻找长期解决方案(即"保持我登录"函数),最常见的方法是通过cookie将令牌发送给用户的浏览器,该cookie会在随后访问该网站的情况下检查。
通常这里的策略是: -
- 检查cookie
- 从cookie中拉动令牌值
- 如果找到了匹配的用户,请自动使用用户,并给他们一个formauthentication票。
有关最佳实践的文章: -
http://jaspan.com/impreved_persistent_login_cookie_best_practice