是否没有办法扩展ASP.Net表单身份验证,以便会话可以扩展到iisreset之后?

是否没有办法扩展ASP.Net表单身份验证,以便会话可以扩展到iisreset之后?,.net,asp.net,asp.net-mvc,iis,.net,Asp.net,Asp.net Mvc,Iis,我刚刚在另一篇帖子上被ping了一下,因为我的应用程序在iisreset之后没有让用户登录 我必须说,我同意评论者的看法,这是一种人为的限制 从我读到的有关表单身份验证的内容来看,登录的会话信息似乎都存储在内存中,当服务器重新启动时,这些信息就会丢失 我想做的是简单地将信息存储在某个地方,最好是存储在数据库中,这样我就可以继续我的会话。不过,我似乎找不到任何方法来扩展它。我错过什么了吗?我是否误解了它的工作原理 我意识到这是他们给我们的“免费”工具,但我不想自己动手,因为他们做对了很多,而且我

我刚刚在另一篇帖子上被ping了一下,因为我的应用程序在iisreset之后没有让用户登录

我必须说,我同意评论者的看法,这是一种人为的限制

从我读到的有关表单身份验证的内容来看,登录的会话信息似乎都存储在内存中,当服务器重新启动时,这些信息就会丢失

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

我意识到这是他们给我们的“免费”工具,但我不想自己动手,因为他们做对了很多,而且我有可能搞砸自己的解决方案

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


我意识到认证机构使用了cookies,但它们尚未过期。不过,在iisreset之后,我仍然会跳转到登录页面。

在ASP.NET中,身份验证会话和“会话状态”(跟踪防伪令牌)是两个完全不同的东西

身份验证由浏览器中的cookie跟踪(通常),因此不会受到iis重新启动的影响


会话状态默认情况下存储在内存中(重新启动时会将其终止),但可以轻松存储在SQL Server或专用的状态服务器进程中(这两个进程都将支持iis重新启动).

听起来您的问题在于
验证密钥
解密密钥
属性被设置为
自动生成
,这意味着它们在IIS重置过程中发生变化

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

您可以通过手动配置固定的
验证密钥
解密密钥
来解决此问题。要做到这一点,请参阅本文:


向下滚动到“”部分并生成加密随机密钥

是的,如果您不再使用InProc,则会在应用程序重新启动时获得会话持久性,如果您处于负载平衡环境中,则会在物理服务器移动时获得会话持久性:有关不同模式的更多详细信息,请参阅。您是对的,会话状态有所不同。据我所知,内部存储了一些用于身份验证的状态,但可以防止到期欺诈等。至少我认为这就是发生的情况。不管怎样,当我重新设置我的应用程序时,它们会在下一个请求时将你跳转到登录页面。我不在任何地方使用会话(除非ASP.NETMVC在后台使用)。服务器内存中没有存储身份验证状态。它只是客户端上的一个加密cookie。尽管MVC的一些特性有时会使用会话状态。你是从MVC演示中得到的吗?也许是在检查会话变量?说实话,看起来我对我原来的问题有了答案。我现在只是验证一下。我假设有状态,因为它停止工作,但看起来它实际上可能是因为机器密钥被重新生成。