注销后,如果我点击返回按钮,可以看到需要登录的最后一页。

30

我在我的网站应用程序中配置了Devise。我遇到以下工作流问题:

要访问管理员面板,我需要登录。之后,我正常地导航到我的网站应用程序的管理面板。当我单击注销时,它会将我重定向到根页面,这是我想要的行为。

奇怪的事情发生在这个页面上,当我执行以上操作并单击浏览器的返回按钮时,它显示的是我最后访问的缓存页面。我的会话已被销毁,因为如果我单击刷新,它会将我重定向并提示我登录以访问该页面,但我不希望能够看到浏览器的最后历史页面。

这是如何实现的,我该如何防止它?这与浏览器缓存有关吗?唯一解决方法是从已登录页面中删除缓存以防止此行为吗?我该如何做到这一点?


1
你可以查看这两个链接: 12 - tiktak
3个回答

59

您想设置页面标题以防止缓存。您可以这样做:

  before_filter :set_cache_buster

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

感谢此讨论串中的第一个回答。


你好,在哪个控制器? - Zakos
在 ApplicationController 中 - inquisitive
7
如果我只想在注销后进行无缓存操作会发生什么?我认为这将在每个请求后都删除缓存。那么对于资源文件,它们也会被删除吗? - fabricioflores
嗨,我只是想问一下这是否适用于所有浏览器,还是特定于某个浏览器? - Fakipo

5
您可以尝试告诉浏览器不要缓存内容,但那只是一种尝试。
如果他们之前查看过页面,您几乎无法强制禁止他们再次查看页面 - 在那时,这在某种程度上已经超出了您的控制范围。
例如,他们可以下载页面的HTML(这就是他们查看页面时所做的),您也无法阻止他们拍摄屏幕截图。
话虽如此,浏览器缓存在某些(大多数?)情况下会起作用,请参考Michael Frederick的答案。

3

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