ASP.NET中的奇数会话行为

时间:2014-11-07 18:27:05

标签: c# asp.net-mvc-5 session-variables

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

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

标签A向第A页开放

标签B对第B页开放

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

但是,如果我刷新选项卡A,会话变量中的数据不会更新为选项卡A.

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

另一个奇怪的事情是,如果我刷新标签A,但从不刷新标签B,那么标签B认为会话数据也从未更新过。

在刷新标签B之前,我不确定为什么会话数据不会更新。

1 个答案:

答案 0 :(得分:1)

我以前见过这个 - 当它发生在我身上时它不是会话变量,它是浏览器缓存。我不得不使用服务器端和客户端方法的组合来设置页面不缓存。

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

<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");

我承认,有点蛮力,但这是我可以让一切都不能在我的环境中缓存的唯一方法。