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

2019-06-24 19:11发布

使用设计我的身份验证后,我发现有在一个安全漏洞,在用户注销后,会话变量将被保留。 这使得任何人都可以按后退按钮和访问登录的用户的一屏幕。

我看着这些职位数量1 号码2 号码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我加入这个顶部

<%if user_signed_in? %>
<%=link_to "Sign Out",  destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........

然后,我测试了火狐,Chrome和Safari的应用。

Firefox和Chrome都在我登出罚款和打后退按钮,无法看到用户的一个画面,但在Safari和Opera,不安全的问题仍然存在。 此代码不会有效果。

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

谢谢

Answer 1:

我面临着同样的问题,找到了一个很好的解决方案,我把它给博客

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

要添加“无缓存”中,添加以下行@的application_controller.rb文件

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


Answer 2:

首先,对于缓存的任何问题,使用马克诺丁汉大学的在HTTP缓存指南

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

试试这个。



Answer 3:

我发现,在我的应用程序控制器,这样的发展真是棒极了。

after_filter  :expire_for_development

protected

def expire_for_development
  expires_now if Rails.env.development?
end


文章来源: Rails ( set_no_cache method) Cannot disable browser caching in Safari and Opera