使用设计我的身份验证后,我发现有在一个安全漏洞,在用户注销后,会话变量将被保留。 这使得任何人都可以按后退按钮和访问登录的用户的一屏幕。
我看着这些职位数量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,不安全的问题仍然存在。 此代码不会有效果。
对于如何解决这个问题,有任何的建议吗?
谢谢
我面临着同样的问题,找到了一个很好的解决方案,我把它给博客
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
首先,对于缓存的任何问题,使用马克诺丁汉大学的在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
文章来源: Rails ( set_no_cache method) Cannot disable browser caching in Safari and Opera