2011-05-23 13 views
23

Establecí algunos valores de cookies en mi formulario mediante jQuery. Puedo leerlos muy bien en mi controlador Rails a través del método cookies. Cuando llamo al cookies.delete(:my_key), parecen desaparecer cuando llamo de nuevo al cookies. Pero cuando vuelvo a cargar la página, las cookies vuelven.Eliminación de cookies de un controlador

¿Hay alguna manera de eliminar las cookies para siempre desde dentro de mi controlador?

EDITAR

Esto es muy extraño ya que estoy mirando las cabeceras de respuesta y que parecen ser la supresión de la cookie. Tal vez es porque es una solicitud 302?

Set-Cookie: my_key=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT 

Respuesta

27

Pruebe este. Por ejemplo, su cookie puede tener este aspecto

cookies[:foo] = {:value => 'bar', :domain => '.text.com'} 

Como se trató éste =>cookies.delete :foo

los registros dirán =>Cookie set: foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT

en cuenta que el dominio no se encuentra. Tratado de esta manera

cookies.delete: foo,: domain => '.text.com'

función =>

# Removes the cookie on the client machine by setting the value to an empty string 
# and setting its expiration date into the past. Like []=, you can pass in an options 
# hash to delete cookies with extra data such as a +path+. 
def delete(name, options = {}) 
    options.stringify_keys! 
    set_cookie(options.merge("name" => name.to_s, "value" => "", "expires" => Time.at(0))) 
end 

Todo lo mejor !!!

+0

Creo recordar bastante algunos problemas relacionados con cookies con marcos basados ​​en Rack. Su solución debería funcionar y es de esperar que cualquier problema se aclare desde el año pasado. – Dex

+0

Información gratuita que concuerda con esta respuesta: http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html dice "Tenga en cuenta que si especifica un: dominio al establecer una cookie, también debe especificar el dominio al eliminar La galleta" –

6

De acuerdo con la rails api, ahora existe un método de eliminación, por lo que si no se ha establecido el dominio utilizan

cookies.delete :my_key 

y si ha configurado el dominio

cookies.delete :my_key, domain: 'mydomain.com' 
Cuestiones relacionadas