有没有办法扩展ASP.Net Forms身份验证,以便会话可以扩展到iisreset?

时间:2010-02-05 13:16:32

标签: .net asp.net asp.net-mvc iis

我刚刚收到其他帖子,因为我的应用程序没有让用户在iisreset后登录。

How do I solve an AntiForgeryToken exception that occurs after an iisreset in my ASP.Net MVC app?

我不得不说我同意评论者这是一个人为限制。

从我读到的有关表单身份验证的内容看来,登录的会话信息全部存储在内存中,当服务器重新启动时,您将丢失该信息。

我想做的是简单地将信息存储在某个地方,最好是存储在数据库中,以便我可以继续我的会话。我似乎无法找到任何方法来扩展它来做到这一点。我错过了什么吗?我误解了它是如何工作的吗?

我意识到这是他们给我们的“免费”套件,但我宁愿不自己动手,因为有很多他们做对了,我有可能搞砸我自己的解决方案。

编辑:注意这与Session状态没有任何关系。据我所知,我根本不使用会话状态,除非框架内的某些东西在内部使用它。

我发现身份验证使用了cookie但它们还没有过期。我仍然会在iisreset之后跳转到登录页面。

2 个答案:

答案 0 :(得分:7)

这里的问题很明显,<machineKey /> validationKeydecryptionKey属性设置为AutoGenerate,这意味着它们会在IIS重置之间进行更改。

这意味着加密的持久表单身份验证Cookie在下一次呈现时将不再有效。

您可以通过手动配置固定的validationKeydecryptionKey来解决此问题。为此,请看一下这篇文章:

  

How To: Configure MachineKey in ASP.NET 2.0

向下滚动到“Web Farm Deployment Considerations”部分并生成加密随机密钥。

答案 1 :(得分:4)

身份验证会话和“会话状态”(跟踪反伪造令牌)是ASP.NET中两个完全独立的东西。

浏览器中的cookie(通常)会跟踪

身份验证,因此不会被iis重启感染。

默认情况下,

会话状态存储在内存中(通过重新启动会被杀死),但可以轻松地存储在SQL Server或专用的State Server进程中(这两个进程都可以使用重新启动)。