Rails (метод set_no_cache) Невозможно отключить кэширование браузера в Safari и Opera

После использования Devise для моей аутентификации я обнаружил, что в безопасности есть дыра в том, что после выхода пользователя переменные сессии сохраняются. Это позволяет любому человеку нажимать кнопку "Назад" и получать доступ к предыдущему экрану зарегистрированного пользователя.

Я посмотрел на эти посты № 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? %>
...........

Затем я протестировал приложение на Firefox, Chrome и Safari.

Firefox и Chrome были хороши тем, что я вышел из системы и нажал кнопку «Назад» и не мог видеть предыдущий экран пользователя, однако в Safari и Opera небезопасное поведение сохраняется. Этот код не имеет эффекта.

Любые предложения о том, как это исправить?

Спасибо

 banditKing31 мая 2012 г., 19:47
ОК, большое спасибо. Мне удалось решить проблему Safari. но для оперы я отмечу ваши предложения. Большое спасибо :)
 hallvors30 мая 2012 г., 14:11
 hallvors31 мая 2012 г., 11:26
Упс, вы правы насчет Safari. Только "Опера" часть вопроса - настоящий дубликат, поскольку ответ там объясняет, почему Opera ведет себя так и что единственный реальный обходной путь - это использовать https и must-revalidate.
 banditKing30 мая 2012 г., 15:36
хмм. Посмотрел по этой ссылке. Нет, где говорится о Safari, там упоминается только Opera. И я попробовал все решения, которые они перечислили там, как вы можете видеть выше.
 equivalent818 нояб. 2014 г., 13:47
кто-нибудь знает как это сделать в рельсах 3.2.20?stackoverflow.com/questions/26994714/…

Ответы на вопрос(3)

Я обнаружил, что выполнение этого в моем контроллере приложений отлично работает для разработки.

after_filter  :expire_for_development

protected

def expire_for_development
  expires_now if Rails.env.development?
end
Решение Вопроса

Я столкнулся с той же проблемой и нашел хорошее решение, и я написал это в

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

Чтобы добавить & # x2018; no-cache & # x2019;, добавьте следующие строки @ файл 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
 25 янв. 2018 г., 06:32
Это не работает в Safari, но в Chrome и Firefox это работает.

Прежде всего, для любых проблем с кешем используйте Mark Nottingham'sруководство по HTTP-кешированию

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

Попробуй это.

Ваш ответ на вопрос