ASP.Net会话状态面临一个奇怪的问题。我们有一个用于浏览用户帐户的遗留应用程序,该帐户使用会话状态来存储某些对象,例如当前打开的帐号。
最近一次更改后,我们在Cache-Control
添加了no-cache, no-store, must-revalidate
标头,我们随机开始从会话状态中丢失帐号。奇怪的是,当由于访问应该存在的会话对象(来自Page_PreRender
)而抛出NullReference异常时,以及当此异常传播到我们重定向到的Application_Error
时自定义错误页面,完全相同的会话对象现在神奇地拥有帐号(我们将其打印在堆栈跟踪上方)。
以下是Application_Error
中我的global.asax
的样子:
Session["ServerLastError"] = (System.Exception)Server.GetLastError();
Server.Execute("~/ApplicationError.aspx");
Server.ClearError();
现在我做了一些挖掘,我在某处读到会话在Application_Error
重置。然而,缺失的数据如何神秘地再次出现?我们的Cache-Control
设置如何影响这个?
不幸的是,由于企业限制,我不能在这里发布大量代码,但是如果需要任何代码来识别问题,请告诉我,我会尝试分享它。
有什么想法在这里发生了什么?