我发现即使在FormAuthentication.RedirectFromLoginPage和FormsAuthentication.SetAuthCookie中将createPersistentCookie设置为true,一旦ASP.NET会话超时,用户也不会被记住.
如果我检查cookie,我发现它被标记为持久性,并且将来有一个到期日期方式,我认为是因为我将web.config FORMS超时设置为几年.无论如何,如果用户关闭浏览器并重新打开它,它们会被正确记住 – 只要ASP会话没有超时.
Scott Hanselmann的An older post让我想知道是否因为FormsAuthentication尝试更新认证券,也许在OpenId模型中不起作用,但是我已经在web.config中设置了FORMS SlidingExpiration =“false”,反正我认为强制持久的cookie会使这些东西无关紧要.
我也想知道为什么DotNetOpenId MVC示例不包括RememberMe复选框 – 也许有一些棘手的问题?
另一方面,在StackOverflow中,我看到我在会话中自动记住.想知道他们是否使用DotNetOpenId以外的其他方法来进行OpenId身份验证.
任何人在ASP.NET MVC中使用DotNetOpenId成功记住吗?任何技巧?
[更新]
感谢您的帮助,安德鲁.原来这不是关于DotNetOpenId.
在阅读this后,我收集到的是,我的主机提供商可能会定期回收应用程序池,这样就可以使用新的机器密钥进行身份验证加密.
根据上述链接的文章,我在Web.Config中的System.Web下添加了以下内容,并解决了以下问题:
<machineKey validationKey="(generated a new key to place here)" decryptionKey="(generated a new key to place here)" validation="SHA1" decryption="AES" />
解决方法
只要你在web.config文件中的超时值很大,那么这就好像你说的一样.但是,一旦你缩短了它,你的持久性cookie不会超过超时值.这个论坛话题帮我回答了这个问题:
http://forums.asp.net/p/1010241/1347970.aspx#1347970
看来web.config中的超时会影响所有的cookie.它说认证券持续多久.所有的验证Cookie都有这个“生存时间”超时,无论它们是否“持久”.因此,持久性Cookie和非持久性Cookie之间的区别在于,前者将持续不同的浏览器会话,如果浏览器关闭,后者将会死亡(早期).
那有意义吗?