如何停止ASP.NET WebForms页面缓存不同版本

3

我有一个默认页面,根据以下情况可以显示三种不同的内容:

  1. 用户未登录
  2. 用户已登录但尚未设置
  3. 用户已登录并且已设置

现在的问题是,有时会显示(1)和(2),而应该显示另一种。当我按下ctrl-r后,正确的版本就会显示。
这与浏览器的返回按钮无关,它发生在单击菜单选项转到默认页面或执行将用户带回默认页面的某些操作之后。

我还为页面设置了路由,因此可以附加用户名。例如:http://www.example.com/user1234

我提到这一点是因为它可能与此有关。

以下是我尝试防止缓存的方法:

<%@ OutputCache Location="None" VaryByParam="None" %>

那个方法没有起作用,所以我尝试了以下操作(在 Page_Load 中):

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache)
Response.Cache.SetNoStore()

我做错了什么?有什么想法吗?

预计时间

根据一些评论,我在Chrome的无痕模式下尝试了一下,没有问题。我也尝试打开控制台查看头文件,但不幸的是问题随之消失。这里还是提供一下头文件:

请求

GET / HTTP/1.1 Host: localhost:2873 Connection: keep-alive
Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.92 Safari/537.36 Referer: .../signin Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8
Cookie: ...

响应

HTTP/1.1 200 OK Cache-Control: no-cache, no-store Pragma: no-cache Content-Type: text/html; charset=utf-8 Content-Encoding: gzip
Expires: -1 Vary: Accept-Encoding Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?...
X-Powered-By: ASP.NET Date: Thu, 27 Mar 2014 20:17:39 GMT
Content-Length: 3045

预计时间2

我一直在Chrome上测试,刚刚发现在FireFox上没有问题。

如果我登录/退出/登录/退出...就没有问题。如果我登录/退出,然后用错误的密码登录几次(导致登录页面回传),然后再正确地登录,它总是在Chrome中显示不正确的注销页面。


2
这个在Chrome的无痕模式下能正常工作吗?(这可能有助于排除任何编码问题)。 如果您使用Fiddler,在显示错误的情况下,您是否看到它发出请求?(我假设您没有看到请求 - 并且它确实加载了缓存副本) - ndhar
1
如果您没有Fiddler,可以使用Chrome Dev工具。响应头是否具有max-age = 0和/或no-cache值? - James Lawruk
一些很棒的想法,谢谢,我会尝试它们的。 - Jules
好的,在隐身模式下它可以正常工作。不幸的是,当控制台打开时,量子效应会发挥作用,导致它无法正常工作。无论如何,我将添加请求和响应头,以便在默认页面上正常工作。 - Jules
你是否使用了任何URL重写? - Dave Mroz
3个回答

1
我曾经遇到同样的问题。我所做的是在页面加载之前放置以下代码:

Response.CacheControl = "No-cache";

这个问题解决了我类似于你的问题。当用户登录时,一个下拉框会被加载,其中包含用户所属的不同商店。如果我更改他们的商店,他们可以返回到页面并看到他们旧的商店集合。我将以上内容放在页面加载中,这解决了我的IE、Chrome和Firefox的问题。希望像这样简单的东西能够解决你的问题。

谢谢,我会尝试一下,虽然我之前已经尝试过其他“确定性”的Response.Cache.*,所以并不抱太大希望。祈求好运!我明天会测试一下... - Jules
很不幸,它不起作用 :( 我只在Chrome中遇到这个问题,而不是在FF中。我刚刚测试了登录,转到另一页并注销。注销后,它返回到默认页面并显示已登录页面。我必须按ctrl-r才能显示正确的页面。 - Jules
遇到了同样的问题。很遗憾上面的方法没有解决我的问题。 - Humpy
Humpy,你是否明确地通过名称引用你的主页?例如:http://mywebsite.com/home 还是像这样:http/myswebsite.com?如果我在重定向中使用名称,问题就会消失。 - Jules
在我的站点主页中,我使用“/Folder/Page.aspx”进行重定向,如果只是我的主页,则使用“/Home.aspx”。 - Humpy

1
为了解决特定文件的缓存问题,您需要添加:
<location path="WebForm1.aspx">
        <system.webServer>
            <caching enabled="false" enableKernelCache="false" />
        </system.webServer>
</location>

将其添加到您的web.config配置部分中。
您也可以使用IIS进行操作。设置不缓存的步骤如下:
1. 进入您网站的内容视图。右键单击文件并切换到特性视图。

enter image description here

2. 选择文件后,从IIS中打开“输出缓存”选项。

enter image description here

从右侧的操作面板上点击“编辑功能设置”,然后在对话框中取消选择“启用缓存”和“启用内核缓存”。单击“确定”将设置保存到web.config中。

enter image description here


又失败了 :( 我相当确定与路由有关,但不知道如何修复。 - Jules

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接