我使用以下代码来设置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代码禁用后退按钮功能,但我需要另一种解决方案。
等待你的帮助。
答案 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模式来帮助减少重新发布数据。
我拒绝使用任何以这种方式与我的浏览器混淆的网站(我可能有其他我想保留的历史记录,如果你在未经我许可的情况下将其删除,我会非常生气)。我知道很多其他人都有同感。因此,除非您想要疏远您的用户,否则请不要这样做。