30

我已经在我的 Web 应用程序中配置了设计。我对以下工作流程有疑问:

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

奇怪的是在这个页面中开始,在上述操作之后,我点击浏览器的后退按钮,它显示了我缓存的最后一页。我的会话已被破坏,因为如果我单击刷新它会重定向我并提到登录以访问该页面,但我不希望能够看到浏览器的最后一个历史页面。

这怎么可能,我能做些什么来防止它?它与浏览器缓存有关吗?修复它的唯一方法是从登录页面中删除缓存以防止这种行为?我怎样才能做到这一点?

4

3 回答 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

归功于此线程的第一个响应。

于 2012-07-03T17:20:52.733 回答
5

您可以尝试告诉浏览器不要缓存内容,但这就是它的本质 - 尝试。

如果他们以前查看过该页面,那么您几乎无法强制无法再次查看该页面 - 此时您无法控制。

例如,可以下载页面的 HTML(这是他们查看页面时正在执行的操作),并且您也无法阻止他们截取屏幕截图。

也就是说,浏览器缓存将在某些(大多数?)情况下起作用,请参阅 Michael Frederick 的回答。

于 2012-07-03T19:10:24.823 回答
3

这肯定与缓存有关。您必须相应地设置适当的 HTTP 标头。这可能有你需要的答案:How to prevent browser page caching in Rails

  • 约翰内斯
于 2012-07-03T10:31:12.260 回答