gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:37 26 4
gpt4 key购买 nike

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

我看了这些帖子 Num 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 中,我在顶部添加了这个

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

然后我在 Firefox、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

关于ruby-on-rails - Rails(set_no_cache 方法)无法在 Safari 和 Opera 中禁用浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com