【问题标题】:ASP.NET Webpage expired Cache issueASP.NET 网页缓存过期问题
【发布时间】:2012-08-27 22:53:33
【问题描述】:

我似乎有一个问题,我找不到解决方案....我有一个 ASP.NET 搜索表单,当用户单击结果然后单击浏览器的后退按钮时,用户将被定向到显示“网页已过期”的页面

我知道这是缓存问题,这是我尝试过的...

protected void Page_Init(object sender, EventArgs e)
{
    Response.AppendHeader("Cache-Control", "no-cache"); 
}

protected void Page_Init(object sender, EventArgs e)
{
    Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    Response.AppendHeader("Pragma", "no-cache");
    Response.AppendHeader("Expires", "0");
}

这些解决方案似乎都不起作用,有人知道为什么吗?

我也试过这个...

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));

但它没有工作。

我做了更多的挖掘,我用 Fiddler 检查了我的标题,它说Cache-Control: private, no-store, must-revalidate我没有在任何地方将我的 Cache-Control 设置为私有......我只有进口,这可能是我的一个import 里面有 Cache-Control 吗?

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using CMS.UIControls;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.Controls;

【问题讨论】:

标签: asp.net caching cache-control


【解决方案1】:

问题

此问题与缓存控制标头无关。对于带有和不带有缓存标题的搜索结果页面,您会看到类似的错误。

这里的问题是您的搜索表单是通过 Http POST 提交的。这意味着搜索字段作为 POST 正文的一部分提交给服务器。浏览器将其视为表单提交(视为联系页面提交)。浏览器内置了防止重复发布相同表单的机制,因为没有经验的用户可能会在不知情的情况下无意中这样做。

例如,假设您有一个向您发送公司电子邮件的联系表。用户可能会通过 POST 表单向您发送消息,然后单击“后退”、“前进”、“后退”、“前进”、“后退”、“前进”,而您不希望收到 3 或 4 个副本相同的消息。因此,当您导航回表单 POST 的结果页面时,浏览器会向您发出警告(某些浏览器会允许您单击“再次提交”,但这是不可取的)。

解决方案

好的,答案是什么?您需要通过 Http GET 方法提交您的搜索查询。这通常会导致搜索字符串出现在搜索结果页面的查询字符串中。例如,在大多数情况下,Google 在查询字符串变量 'q' 中编码他们的搜索字符串。您可能有一个看起来像“SearchResults.aspx?q=Test%20Phrase”的页面。请注意搜索短语是在查询字符串中提供的(作为页面 URL 的一部分)而不是在 POST 正文中?

有关如何在 ASP.net 以帖子为中心的处理方式中完成此操作的更多信息,请查看this stackoverflow post。 @Solburn 提供的示例是本文中最好的示例。

【讨论】:

    【解决方案2】:

    BenSwayne 已经完美地回答了这个问题。 在此之上。 这是使用 .Net 的 ImageButton 控件时的常见问题 例如

    <asp:ImageButton ID="ibnDisplayImage" runat="server" ImageUrl="test.jpg" 
    PostBackUrl="~/home.aspx" />
    

    所以为了避免这个问题。使用下面的代码。

    <a href="~/home.aspx"><img src="test.jpg" /> </a>
    

    <asp:HyperLink ID="lnkDisplayImage" runat="server" NavigateUrl="~/home.aspx" > <asp:Image ID="imgDisplayImage" runat="server" ImageUrl="test.jpg" /> </asp:HyperLink>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2011-02-28
      • 2011-01-11
      相关资源
      最近更新 更多