我们有一个ASP Web-Forms网站,我们经常更新。

但是,每当我们修改存储在App_Code文件夹中的任何类时,这都会导致应用程序池回收并丢失所有会话状态,从而导致用户注销。

这意味着我们每次需要在应用程序代码中进行更改时,都需要在凌晨2:00左右进行,以最大程度地减少对用户的影响。

现在,由于我珍视睡眠,所以我想知道是否有任何解决方法来解决此问题?

我尝试过切换应用程序以将StateServer模式用于会话状态。

只要当前不使用要更改的类,这似乎就可以工作。
但是,如果正在使用该类,则将导致失去每个主体的会话。

在这种情况下,对于频繁使用的网站,最佳做法是什么?

每当我们需要修复班级中的错误时,我是否都应该深夜?

预先感谢您的任何回复...

最佳答案

除mode =“ StateServer”外,您还需要sessionState设置cookieless =“ false”。

另外,您需要固定的机器密钥,因此回收不会生成新的机器密钥,而是使用相同的密钥。如果生成了新密钥,则无法解密所有先前的sessionId,因此与sessionState的链接将会丢失。

检查https://technet.microsoft.com/en-us/library/cc755177(WS.10).aspx,了解如何配置/生成机器密钥。

这是msdn的示例,因此不要在生产中使用它,而是生成自己的密钥:

<machineKey
validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F"
decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4"
/>


最后,如果要在计算机级别设置相同的密钥,则需要在Web.config或Machine.config中添加类似的内容。

10-04 22:14
查看更多