Définir la date de début et la date d'expiration des cookies Rails

83

Comment configurer un cookie Rails pour qu'il démarre et / ou expire à une certaine date?

approxiblue
la source

Réponses:

200

Extraits de la documentation Rails 5 :

Les cookies sont lus et écrits via les cookies ActionController #.

Les cookies en cours de lecture sont ceux reçus avec la demande, les cookies en cours d'écriture seront envoyés avec la réponse. La lecture d'un cookie ne récupère pas l'objet cookie lui-même, mais uniquement la valeur qu'il contient.

Exemples d'écriture:

# 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"

[...]

Les symboles d'option pour la configuration des cookies sont:

  • :expires - L'heure à laquelle ce cookie expire, en tant qu'objet Time ou ActiveSupport :: Duration.

[...]

Senthil Kumar Bhaskaran
la source
23
Tout cela est dans la documentation: api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Guilherme Garnier
8
@Senthil, Si vous obtenez quelque chose d'un autre article (dans ce cas «tel quel» de la documentation des rails), veuillez donner une référence à l'origine.
sameera207
1
aussi: l'option expires doit être une instance Time. cookies[:login] = { value: "JX-122", expires: 3.months }soulèverait une erreur. mais ce ne sera pas le cas. cookies[:login] = { value: "JX-122", expires: 3.months.from_now } voir pour plus de détails github.com/rack/rack/issues/864#issuecomment-104706555
zhisme
18

votre question pourrait être liée à cette question: Comment définir dynamiquement l'heure d'expiration d'une session basée sur les cookies dans Rails

l'un des commentaires indique l' abandon des sessions SlideSessions :

"..Si vous avez besoin de définir une période d'expiration pour les sessions via tous les contrôleurs de votre application, ajoutez simplement l'option suivante à votre fichier config / intializers / session_store.rb:

:expire_after => 60.minutes

Si vous devez définir une heure d'expiration différente dans différents contrôleurs ou actions, utilisez le code suivant en action ou certains before_filter:

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

La duplication du hachage n'est nécessaire que parce qu'il est déjà figé à ce stade, même si la modification d'au moins: expire_after est possible et fonctionne parfaitement ... "

J'espère que cela aide. :)

pageman
la source
Cela peut-il également être fait pour le magasin de session ActiveRecord?
Lohith MV
4

Il est à noter qu'à l'heure actuelle, il est impossible de définir une heure de début pour un cookie. Un ensemble de cookies est toujours actif immédiatement.

eltiare
la source