在ASP.NET MVC中使用DotNetOpenAuth 3并实现RememberMe工具......
我发现即使我在FormsAuthentication.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成功完成了RememberMe吗?任何技巧?
[更新]
感谢您提供帮助,安德鲁。事实证明这不是关于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" />
答案 0 :(得分:3)
我仍然认为cookie名称应该匹配......但是这里还有别的东西。
听起来你只是说你的web.config文件中的超时很大,然后就可以了。但是一旦你缩短它,你的持久cookie就不会超过超时值。这个论坛主题帮我解答了这个问题: http://forums.asp.net/p/1010241/1347970.aspx#1347970
似乎web.config中的超时会影响所有cookie。它说验证票持续多长时间。所有auth cookie都有“生存时间”超时,无论它们是否“持续”。因此,持久性cookie和非持久性cookie之间的区别在于前者将持续不同的浏览器会话,而后者将在浏览器关闭时(早期)死亡。
这有意义吗?
答案 1 :(得分:2)
您的web.config文件中的cookie名称是否匹配,以及您的控制器是否调用FormsAuthentication.SetAuthCookie?这可能是DNOI示例中的错误,但我怀疑如果您的web.config文件中有cookie名称(如DNOI示例所示),那么您可能必须将cookie名称设置为SetAuthCookie或RedirectFromLoginPage的第三个参数。否则,表单auth无法识别您设置为登录cookie的持久性cookie。