MVC 4:如何在IIS重启后保持会话和cookie仍然有效?

Alv*_*nus 12 c# asp.net cookies asp.net-mvc session

IIS服务器重启后,我的登录会话(使用简单会员资格)和cookie(验证令牌)似乎无效.这对我来说是一个问题,如果一个用户在事务中间然后服务器重新启动,用户必须重新填写表单并再次执行它,也可能是一些代码问题,当事务在中间中断时处理.

服务器重启后如何使它们仍然有效?

这是我的web.config:

<membership />
...
<sessionState mode="InProc" cookieless="false" timeout="2880" />
...
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication> 
...
<staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
  <remove fileExtension=".woff" />
  <remove fileExtension=".woff2" />
  <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
  <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
</staticContent>
Run Code Online (Sandbox Code Playgroud)

更新

我试图使用SQLServer来存储会话状态.然后出现了新的问题,我不能使用,ViewBag因为它不是Serializable.

还有另一种方法可以达到这个目的吗?

Ima*_*mad 5

没有办法实现这个AFAIK.您始终可以使用DatabaseFile保留会话和cookie值.

想法可能是您要序列化要保留的对象SessionCookie.有很多工具可以为你做序列化,我使用newtonsoft.然后将其与会话密钥一起存储在DB中.

为了获得它,你可以简单地基于会话密钥发出一个查询,获取字符串并反序列化它,你就完成了:)


mat*_*fei 5

默认情况下,会话数据存储在内存中。因此,您在 IIS 重新启动时丢失了它。您可以考虑使用其他 out of proc sessionstate provider 来存储数据,例如数据库、sessionstate 服务。