如何从ASP.net MVC禁用浏览器历史记录保存或兑现选项

时间:2014-02-22 11:05:02

标签: asp.net-mvc caching

我使用以下代码来设置HTTP标头 Pragma:no-cache 缓存控制:无缓存,无控制

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();

我检查了响应头包含Pragma:no-cache,这意味着上面的C#代码工作正常。

我的问题是;

应用程序响应头包含Pragma:no-cache和Cache-Control:no-chase。那么为什么浏览保存历史呢?

我需要帮助,我可以通过浏览器禁用后退按钮或保存历史记录。

我知道我可以通过js隐藏浏览器中的工具栏,也可以通过编写js代码禁用后退按钮功能,但我需要另一种解决方案。

等待你的帮助。

2 个答案:

答案 0 :(得分:2)

在您的代码中使用此功能,即使您按下浏览器后退按钮,控制器操作也会起作用 -

Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1

<强>更新

我在控制器动作中使用了这个,如下图所示,当我点击浏览器后退按钮时,我得到了控制器动作断点。我正在使用Chrome 33.0.1750.117进行测试。

public class PersonController : Controller
{
    public ActionResult Index()
    {
        Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
        Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
        Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
        Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
        Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1
    }
}

答案 1 :(得分:1)

缓存与历史无关。这是两个不同的功能。禁用缓存不会指示浏览器避免保存历史记录。没有支持的方法来“禁用后退按钮”或禁用历史记录。

这是一项客户端功能。可能会或可能不会有某些特定于浏览器的黑客攻击,但这些黑客不受支持,可能会破坏新版本的浏览器,移动浏览器等......

而不是试图强制浏览器执行某些不是设计的操作,而是设计您的网站,以便后退按钮不会导致问题。

例如,使用Post Redirect Get模式来帮助减少重新发布数据。

我拒绝使用任何以这种方式与我的浏览器混淆的网站(我可能有其他我想保留的历史记录,如果你在未经我许可的情况下将其删除,我会非常生气)。我知道很多其他人都有同感。因此,除非您想要疏远您的用户,否则请不要这样做。