Rails(set_no_cache方法)无法在Safari和Opera中禁用浏览器缓存

在使用Devise进行身份validation后,我发现有一个安全漏洞,在用户注销后,会话变量被保留。 这允许任何人按下后退按钮并访问登录用户的上一屏幕。

我看了这些postNum 1 Num 2 Num 3

我将这些行添加到application_controller中

before_filter :set_no_cache def set_no_cache 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 

在_form.html.erb中,我在顶部添加了这个

   :delete %>
...........

然后我在Firefox,Chrome和Safari上测试了该应用程序。

Firefox和Chrome很好,因为我退出并点击了后退按钮,无法看到用户的上一个屏幕,但是,在Safari和Opera中,不安全的行为仍然存在。 此代码没有效果。

对于如何解决这个问题,有任何的建议吗?

谢谢

我遇到了同样的问题,并找到了一个很好的解决方案,我在博客上写道

http://www.fordevs.com/2011/10/how-to-prevent-browser-from-caching-a-page-in-rails.html

要添加“no-cache”,请在application_controller.rb文件中添加以下行

 before_filter :set_no_cache 

和function

 def set_no_cache 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 

首先,对于缓存的任何问题,请使用Mark Nottingham的HTTP缓存指南

 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 

试试这个。

我发现在我的应用程序控制器中执行此操作非常适合开发。

 after_filter :expire_for_development protected def expire_for_development expires_now if Rails.env.development? end 
Interesting Posts