2012-05-24 13 views
11

Después de usar Devise para mi autenticación, descubrí que había un agujero de seguridad en que, después de que el usuario finaliza la sesión, las variables de sesión se conservan. Esto le permite a cualquiera presionar el botón Atrás y acceder a la pantalla anterior del usuario conectado.Rails (método set_no_cache) No se puede deshabilitar el almacenamiento en caché del navegador en Safari y Opera

Miré a estos puestos Num 1 Num 2 Num 3

que he ido añadiendo estas líneas a mi 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 

En el _form.html.erb añadí esto en la parte superior

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

Luego probé la a aplicación en Firefox, Chrome y Safari.

Firefox y Chrome estuvieron bien en que me desconecté y presioné el botón Atrás y no pude ver la pantalla anterior del usuario, sin embargo, en Safari y Opera, el comportamiento inseguro persiste. Este código no tiene un efecto.

¿Alguna sugerencia sobre cómo solucionar esto?

Gracias

+0

Este es un duplicado de http://stackoverflow.com/questions/2866826/how-do-i-stop-opera-from-caching-a-page – hallvors

+0

hmm. Miró este enlace. No, donde habla de Safari, solo menciona a Opera. Y he probado todas las soluciones que enumeraron allí como puede ver arriba. – banditKing

+0

Ops, tienes razón sobre Safari. Solo la parte "Ópera" de la pregunta es un duplicado real, ya que la respuesta allí explica por qué Opera se comporta así y que la única solución real es usar https y debe volver a validar. – hallvors

Respuesta

11

que enfrentan el mismo problema y encontrar una buena solución y que escribió en su blog que a

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

Para agregar 'no-cache', añadir las siguientes líneas al archivo @ application_controller.rb

before_filter :set_no_cache 

y la función

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 
+0

Esto no funciona en Safari, pero Chrome y Firefox hace. – joeyk16

1

En primer lugar, para cualquier problema con la memoria caché, el uso de Mark Nottingham guide on HTTP caching

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

Prueba esto.

0

encontré que d Esto en mi controlador de aplicaciones funcionó muy bien para el desarrollo.

after_filter :expire_for_development 

protected 

def expire_for_development 
    expires_now if Rails.env.development? 
end 
Cuestiones relacionadas