Establecer fecha de inicio y fecha de vencimiento para las cookies de Rails

83

¿Cómo configuro una cookie de Rails para que comience y / o caduque en una fecha determinada?

aproximadamente azul
fuente

Respuestas:

200

Extractos de la documentación de Rails 5 :

Las cookies se leen y escriben a través de las cookies ActionController #.

Las cookies que se leen son las que se reciben junto con la solicitud, las cookies que se escriben se enviarán con la respuesta. Leer una cookie no recupera el objeto de la cookie en sí, solo el valor que tiene.

Ejemplos de escritura:

# Sets a simple session cookie.
# This cookie will be deleted when the user's browser is closed.
cookies[:user_name] = "david"

# Sets a cookie that expires in 1 hour.
cookies[:login] = { value: "XJ-122", expires: 1.hour }

# Sets a cookie that expires at a specific time.
cookies[:login] = { value: "XJ-122", expires: Time.utc(2020, 10, 15, 5) }

# Sets a "permanent" cookie (which expires in 20 years from now).
cookies.permanent[:login] = "XJ-122"

[...]

Los símbolos de opción para configurar cookies son:

  • :expires - La hora a la que caduca esta cookie, como objeto Time o ActiveSupport :: Duration.

[...]

Senthil Kumar Bhaskaran
fuente
23
Todo esto está en los documentos: api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Guilherme Garnier
8
@Senthil, si obtiene algo de otro artículo (en este caso, 'tal cual' de los documentos de rails), por favor, dé una referencia al origen.
sameera207
1
también: la opción expires debe ser una instancia de Time. cookies[:login] = { value: "JX-122", expires: 3.months }generaría error. pero esto no lo hará. cookies[:login] = { value: "JX-122", expires: 3.months.from_now } ver más detalles en github.com/rack/rack/issues/864#issuecomment-104706555
zhisme
18

su pregunta podría estar relacionada con esta pregunta: ¿Cómo puedo establecer dinámicamente el tiempo de vencimiento para una sesión basada en cookies en Rails?

uno de los comentarios apunta a Desactivación de SlideSessions :

"... Si necesita establecer un período de vencimiento para las sesiones a través de todos los controladores en su aplicación, simplemente agregue la siguiente opción a su archivo config / intializers / session_store.rb:

:expire_after => 60.minutes

Si necesita establecer un tiempo de vencimiento diferente en diferentes controladores o acciones, use el siguiente código en acción o algún before_filter:

request.session_options = request.session_options.dup
request.session_options[:expire_after]= 5.minutes
request.session_options.freeze

La duplicación del hash es necesaria solo porque ya está congelado en ese punto, aunque la modificación de al menos: expire_after es posible y funciona sin problemas ... "

Espero que eso ayude. :)

pageman
fuente
¿Se puede hacer esto también para la tienda de sesiones de ActiveRecord?
Lohith MV
4

Vale la pena señalar que a partir de ahora es imposible establecer una hora de inicio para una cookie. Un conjunto de cookies siempre está activo de inmediato.

eltiare
fuente