asp.net - session 生命周期问题

标签 asp.net session-variables iisreset

我对 ASP.NET 中 session 的生命周期有点困惑,这是我的测试用例。

用户登录,我将一些信息保存到 session 变量(例如 Session["bob"]="bob"),然后我执行“IIS 重置”。用户仍处于登录状态,但 session 数据为 null(例如 Session["bob"].ToString() 抛出 NullReferenceException

我希望 session 数据仍然存在。除了注销用户之外,我还能做些什么吗?我希望只要用户仍然登录, session 数据就会存在。

非常感谢任何好的链接,以便我理解发生了什么,以及对实际问题的任何帮助。我尝试用谷歌搜索这个,但无法以某种方式构建问题以获得我想要的内容。

最佳答案

您看到的行为 - Session 内容在 IIS 重置事件中无法保存 - 是由于 Session 值的存储位置。默认情况下,这些值存储在 ASP.NET“工作进程”的内存中,这是运行 ASP.NET 网站的程序。

当您执行“IIS 重置”时,您会关闭整个 IIS 服务器,包括 ASP.NET 工作进程。这意味着 Session 的内容已从内存中删除。您的用户似乎仍处于登录状态,因为这是由存储在其浏览器中的 cookie 控制的。如果 cookie 仍然有效,则登录有效。

如果您希望您的 session 状态在 IIS 重置(或任何其他导致 ASP.NET 工作进程重新启动的情况)后继续存在,您需要将您的 session 对象存储在另一个地方。 ASP.NET 通过使用不同的 session 存储“模式”完全支持这一点。阅读 MSDN 文章“Session-State Modes”中的内容。

有关 session 的一般概述,请查看 MSDN 上的“ASP.NET Session State Overview”文章。

关于asp.net - session 生命周期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901076/

相关文章:

php - 为什么此 PHP 脚本(由 AJAX 调用)随机无法正确加载 SESSION?

c# - 这个 ASP.NET 顾问知道他在做什么吗?

Windows 10 上的 iisreset 错误

asp.net - ascx/aspx 文件中的更改 - 是否会重置应用程序

asp.net - 无法在 Foreach 循环中将类型 "char"转换为 "string"

c# - 如何将数据从 aspx 页面传递到 ascx 模式弹出窗口?

javascript - 将数据从客户端传递到服务器端

asp.net - Asp.Net Identity 中带有破折号的身份电子邮件

c# - 如何在 session 变量中保存多个值