【发布时间】:2017-06-24 10:19:15
【问题描述】:
似乎我的登录会话(使用简单成员)和 cookie(验证令牌)在 IIS 服务器重新启动后无效。这对我来说是个问题,如果用户在事务中间然后服务器重新启动,用户必须重新填写表单并再次执行,也可能是事务在中间中断时出现的一些代码问题过程。
如何让它们在服务器重启后仍然有效?
这是我的 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>
更新
我尝试使用 SQLServer 来存储会话状态。然后出现了新问题,我不能使用ViewBag,因为它不是Serializable。
还有其他方法可以实现吗?
【问题讨论】:
-
会话存储在服务器上,因此如果服务器重新启动,会话就会丢失,但是您可以使用 cookie 来存储数据,因为它存储在客户端计算机上。
-
您是否尝试过在 web.config 中设置 Machinekey 而不是使用自动生成类型?重新启动时,IIS 将生成一个用于加密/解密登录 cookie 的新密钥,阻止它读取现有的 cookie。通过设置MachineKey,重启后仍然可以读取cookie。
-
ViewBag与session没有任何关系,除非您将ViewBag存储在Session中,这当然不是一个好习惯。 -
在客户端...只需寻找适当的响应...如果没有,则在新表单中重新填写数据。他们不会去任何地方...我认为您不需要为此做出详尽的回应,对吗?如果是这样,那么您可能需要在问题中提供更多详细信息,说明原因,因为这听起来可能是一个特定的需求。
-
您在会话中搅拌的是什么类型的?数据表?列表?
标签: c# asp.net asp.net-mvc session cookies