【问题标题】:Odd Session Behavior in ASP.NETASP.NET 中的奇怪会话行为
【发布时间】:2014-11-07 18:27:05
【问题描述】:

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

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

选项卡 A 对页面 A 打开

标签 B 对页面 B 打开

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

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

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

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

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

【问题讨论】:

  • 在服务器上设置断点。根据您的描述,如果 Ajax 调用没有按照您认为的方式更新会话,我不会感到惊讶。
  • 我已经这样做了(我不是菜鸟哈哈)。是的,它正在按应有的方式更新会话。
  • 您是否尝试过其他浏览器?也许这只是您使用的特定浏览器的一个怪癖?
  • @ChrisPratt 有一个很好的观点。尝试清除您的 cookie - 也许它们被卡住了?
  • 也许尝试将 AJAX 从图片中删除以排除问题?

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


【解决方案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");

我承认有点蛮力,但这是我可以使所有内容不缓存在我的环境中的唯一方法。

【讨论】:

  • 试过了,没用...不知道是什么问题,显然没有其他人遇到过这个问题,因为谷歌找不到任何东西哈哈
  • 我不是 MVC 专家(我使用 Web 表单),但您的选项卡在更新面板中吗?如果您可以使用 UpdatePanel,也许可以在您的标签内容中放置一个?
  • @Tim:很确定 OP 是指浏览器选项卡意义上的“选项卡”,而不是页面上的选项卡窗格类型控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2014-03-03
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多