c# - 有没有办法在不丢失 session 状态的情况下修改 ASP.NET 应用程序中的 App_Code?

标签 c# asp.net session webforms

我们有一个经常更新的 ASP Web 表单站点。

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

这意味着任何时候我们需要更改应用代码时都需要在凌晨 2:00 左右进行,以尽量减少对用户的影响。

现在,由于我重视 sleep ,我想知道是否有解决此行为的方法?

我尝试将应用程序切换为对 session 状态使用 StateServer 模式。

只要正在更改的类当前未在使用中,这似乎就可以工作。 但是,如果该类正在使用,则会导致每个人的 session 丢失。

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

每次我们需要修复类(class)中的错误时,我是否都会被迫熬夜?

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

最佳答案

除了 mode="StateServer"之外,您还需要将 sessionState 设置为 cookieless="false"。

此外,您需要一个固定的机器 key ,因此回收不会生成新的机器 key ,而是使用相同的 key 。如果生成新 key ,则之前的所有 sessionId 都无法解密,因此到 sessionState 的链接将丢失。

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

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

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

如果您想在计算机级别设置相同的 key ,最后您需要在 Web.config 或 Machine.config 中进行类似的操作。

关于c# - 有没有办法在不丢失 session 状态的情况下修改 ASP.NET 应用程序中的 App_Code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913980/

相关文章:

c# - 比较javascript中的两个字符串; ASP。净C#

c# - 无法加载非常大的 JSON(92,000 行)

android - WCF With Android- 绑定(bind)结果与标签或 ListView

c# - 在 C# 中触发 Google Analytics 重定向

php - Laravel 5.2 使用 Flash 数据重定向

php - session 可以在本地主机上运行,​​但不能在服务器上运行(Ipage 等..)

c# - 定义实现泛型的接口(interface)依赖

c# - 有没有办法在 ASP.NET Core 3.1 应用程序端点中应用服务器 SSL 证书?

asp.net-mvc - MVC4 : User. IsInRole 无法正常工作

c# - LINQ 加入 2 个列表<T>