我听从了this question关于如何实现自定义IPrincipal的建议(我需要它来存储userId,以便减少对数据库的调用,只获得userId)。
现在,如果我登录网站并离开约20分钟,不要在网站上做任何事情,并刷新页面,它再次要求登录。
自定义实现的IPrincipal是否有过期时间?如果有,如何延长过期时间?
发布于 2012-10-31 06:01:48
IPrincipal只是一个任何实现类都必须遵守的约定。
超时时间实际上取决于实现,但在ASP应用程序上,一个重要的考虑因素应该是formsAuthentication超时值。
http://msdn.microsoft.com/en-us/library/system.web.configuration.formsauthenticationconfiguration.timeout.aspx
这将是ASP .NET在没有用户输入的情况下保持会话打开的时间。在此之后,它将不会保留任何有关登录用户的信息。大多数iPrincipal实现都依赖于将Context.User.Identity.Name与数据库中的条目进行匹配。一旦达到窗体身份验证超时,该值(和IsAuthenticated == true )状态就会丢失,从而导致请求单独登录。如果您只想简单地延长超时时间,请先尝试调整该值。
如果您正在寻找更长期的解决方案(即“让我保持登录”功能),最常见的方法是通过cookie将令牌发送到用户的浏览器,该cookie会在随后访问网站时进行检查。
通常,这里的策略是:
有关最佳实践的文章如下:
http://jaspan.com/improved_persistent_login_cookie_best_practice
https://stackoverflow.com/questions/13147973
复制相似问题