我刚刚收到其他帖子,因为我的应用程序没有让用户在iisreset后登录。
How do I solve an AntiForgeryToken exception that occurs after an iisreset in my ASP.Net MVC app?
我不得不说我同意评论者这是一个人为限制。
从我读到的有关表单身份验证的内容看来,登录的会话信息全部存储在内存中,当服务器重新启动时,您将丢失该信息。
我想做的是简单地将信息存储在某个地方,最好是存储在数据库中,以便我可以继续我的会话。我似乎无法找到任何方法来扩展它来做到这一点。我错过了什么吗?我误解了它是如何工作的吗?
我意识到这是他们给我们的“免费”套件,但我宁愿不自己动手,因为有很多他们做对了,我有可能搞砸我自己的解决方案。
编辑:注意这与Session状态没有任何关系。据我所知,我根本不使用会话状态,除非框架内的某些东西在内部使用它。
我发现身份验证使用了cookie但它们还没有过期。我仍然会在iisreset之后跳转到登录页面。
答案 0 :(得分:7)
这里的问题很明显,<machineKey />
validationKey
和decryptionKey
属性设置为AutoGenerate
,这意味着它们会在IIS重置之间进行更改。
这意味着加密的持久表单身份验证Cookie在下一次呈现时将不再有效。
您可以通过手动配置固定的validationKey
和decryptionKey
来解决此问题。为此,请看一下这篇文章:
向下滚动到“Web Farm Deployment Considerations”部分并生成加密随机密钥。
答案 1 :(得分:4)
身份验证会话和“会话状态”(跟踪反伪造令牌)是ASP.NET中两个完全独立的东西。
浏览器中的cookie(通常)会跟踪身份验证,因此不会被iis重启感染。
默认情况下,会话状态存储在内存中(通过重新启动会被杀死),但可以轻松地存储在SQL Server或专用的State Server进程中(这两个进程都可以使用重新启动)。