我有一个ASP.Net MVC - 5应用程序,并且在我在Session中存储值的地方之一
System.Web.HttpContext.Current.Session["MyValue"] = user.SessionID;
我能够以
的形式访问该值 int x = (int)System.Web.HttpContext.Current.Session["MyValue"];
但是当我停止IIS Express时,我想访问相同的值。我知道从Application_End
调用Global.asax
。
protected void Application_End()
{
int x = (int)System.Web.HttpContext.Current.Session["MyValue"];
}
但 x 的值为null。是否有任何特殊原因在Application_End()中无法使用会话值。我在这里错过了什么吗?
答案 0 :(得分:2)
在调用Application_End时,会话已经处理完毕。如果您需要在IISExpress完全停止之前获取信息,请尝试使用Session_End。
答案 1 :(得分:1)
默认情况下,会话存储在内存(InProc
)模式下。当您的应用程序关闭时,将擦除与其关联的所有内存。这意味着您可能已存储在会话中的所有内容都已消失。这就是为什么在生产中你绝对不应该使用InProc
模式而是将存储卸载到单独的服务或SqlServer的原因。如果由于某种原因您的应用程序被IIS回收(例如由于某些不活动或高负载),则所有会话数据都将消失。