ASP.NET中的异常会话行为

本文关键字:会话 异常 NET ASP | 更新日期: 2023-09-27 18:29:33

首先,这是我自己的项目,不是家庭作业。

情况是这样的。我有一个web应用程序(ASP.NET w/MVC 5),我使用会话来存储某些内容(例如用户信息)。现在,打开了两个选项卡,每个选项卡都位于页面的一部分。我们将称之为标签A和标签B。下面是场景:

选项卡A打开到页面A

选项卡B打开到页面B

在选项卡B中,用户执行一个需要更新会话变量的操作。因此,我通过对控制器方法的Ajax调用将新数据写入会话变量。

然而,如果我刷新选项卡A,会话变量中的数据不会为选项卡A更新。

如果我刷新选项卡B,然后返回选项卡A并刷新,则会话中的数据将更新选项卡A。

另一件奇怪的事情是,如果我刷新了选项卡A,但从未刷新过选项卡B,那么选项卡B认为会话数据也从未更新过。

我不知道为什么在刷新选项卡B之前会话数据不会更新。

ASP.NET中的异常会话行为

我以前见过这种情况——发生在我身上的不是会话变量,而是浏览器缓存。我不得不将页面设置为不使用服务器端和客户端方法的组合进行缓存。

客户端我发现我需要这样做来强制所有支持的浏览器不要缓存:

<meta http-equiv="cache-control" content="max-age=0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
    <meta http-equiv="pragma" content="no-cache" />

服务器端我不得不这样做:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");

我承认这有点残忍,但这是我唯一能让所有东西都不缓存在我的环境中的方法。