web-dev-qa-db-fra.com

Comment Rails / devise gère-t-il les sessions de cookies?

Je voudrais comprendre ce qui se passe réellement lors de la connexion d'un utilisateur avec Rails/devise.

J'ai créé une application minimale Rails, installé et créé un modèle de modèle User. Tout fonctionne correctement et lorsque je me connecte (à l'aide de remember me) Je reçois un cookie de session comme prévu.

Maintenant, ce qui me dérange, c'est: Comment Rails gère-t-il les informations de session que le navigateur traverse le cookie?

Je m'attendais naïvement à ce que certaines informations soient stockées dans la base de données, mais je ne vois pas où. Il n'y a pas de table session, pas de colonne de session dans Users, et je n'ai rien trouvé d'intéressant dans le répertoire tmp.

Notez que redémarrer le serveur ne tuerait pas ma session. C'est bien sûr prévu, mais maintenant je me demande vraiment quel genre de magie se passe ici?

en d'autres termes: comment le serveur vérifie-t-il la validité d'un cookie pour authentifier un utilisateur?

Merci !

22
aherve

Le stockage de session par défaut Rails est CookieStore. Cela signifie que toutes les données de session sont stockées dans un cookie plutôt que dans la base de données n'importe où. Dans Rails 3.2 le cookie) est signé pour empêcher la falsification, mais n'est pas chiffré. En Rails 4, il est généralement chiffré par défaut. Le fait qu'il soit dans un cookie est la façon dont il persiste à travers les redémarrages de votre serveur. Cela signifie également que vous pouvez ne stockez que 4k de données et vous ne voudriez pas y stocker quoi que ce soit de sensible dans Rails <4. Il est préférable de garder un minimum de données dans la session de toute façon.

Vous pouvez également opter pour le stockage des données de session dans la base de données et avoir uniquement un identifiant de session dans un cookie.

Cette réponse que j'ai donnée l'autre semaine contient quelques informations supplémentaires qui pourraient être utiles:

Les sessions avaient du sens pour moi avant de commencer à lire à leur sujet en ligne

En outre, le Rails api doc pour CookieStore donne un bon résumé:

http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html

19
Tim