当用户单击后退按钮时,如何防止缓存页面被提供?

时间:2011-06-17 18:45:55

标签: html caching browser

我知道这个问题之前已被多次询问过,但发布的解决方案对我不起作用。

我在<head>标记中添加了以下内容,但无济于事:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">

我在浏览器中也看到了onunload属性和bfcache的一些提及,所以我将其添加到<body>标签中,也无济于事。

我服务器的响应标头包含:

Cache-Control   max-age=0, private, must-revalidate

如果有人能指出我正确的方向,我会感激不尽 - 我做错了什么?

3 个答案:

答案 0 :(得分:6)

回答我自己的问题。事实证明,设置以下响应标头(而不是META标签)对我有用:

Cache-Control private, no-store, max-age=0, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Expires Fri, 01 Jan 1990 00:00:00 GMT

如果您像我一样在Rails工作,可以通过将以下内容放入ApplicationController before_filter回调中来轻松完成此操作:

response.headers["Cache-Control"] = "private, no-store, max-age=0, no-cache, must-revalidate, post-check=0, pre-check=0"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"

答案 1 :(得分:1)

使用后退按钮将使用缓存,如@kindall所说。这真的取决于你不想要缓存的内容。

您可以构建页面导航,而不是鼓励用户使用后退按钮,这样用户可以随时到达他们想要的位置,而无需使用后退按钮吗?

您不希望缓存的内容可以通过ajax动态加载吗?

答案 2 :(得分:1)

您可以在http()fun中终止会话后使用reload()重新加载已登录的页面,这将更新本地缓存。由于您的会话已结束,因此重新加载将带您进入登录页面。即使按下浏览器后退按钮,登录页面仍然存在,因为本地缓存已更新。