2010-09-13 6 views
1

Avec Rails 3, le mécanisme de stockage de session par défaut est cookie_store. Je suppose que cela signifie que les contenus dans le hash de session sont sérialisés, encodés et stockés dans un cookie dans le navigateur? Est-ce que cela signifie que rien (ou très peu) de la session est stockée dans le serveur?Rails 3 Sessions basées sur des cookies Question

J'ai eu quelques problèmes pour lesquels une erreur de débordement de cookie s'est produite et je suppose que j'ai continué à ajouter à mon instance d'utilisateur (qui a également été liée/extraite du cookie).

u = session[:user] 
u.add_this lots_of_data 

alors finalement j'ai eu une erreur de débordement de cookie.

Ai-je raison à ce sujet? Les sessions sont-elles entièrement stockées dans les cookies dans Rails 3 (par défaut)?

Répondre

5

Oui, si vous utilisez le magasin de cookies, les données de session sont stockées dans le cookie. Si vous souhaitez le stocker sur le serveur, vous devrez utiliser un autre magasin de sessions.

Cependant, si vous stockez des objets de modèle ou "beaucoup de données" dans la session, vous vous trompez probablement en premier lieu. Vos données devraient aller à la base de données, et la session devrait contenir seulement autant d'information que vous avez besoin pour le récupérer.

Dans votre cas, cela signifie stocker l'ID utilisateur dans la session et charger l'utilisateur à partir de la base de données dans un before_filter.

+0

Oui, exactement. En d'autres termes, ne stockez pas des modèles entiers dans la session lorsque vous pouvez simplement stocker leur ID de base de données. –

+0

Droite. Exactement! La question reste est que les modèles eux-mêmes peuplent et deviennent de plus en plus gros dans le cookie que vous les peupler sur le serveur? – matsko

+0

Si vous mettez l'ID dans la session, vous aurez l'ID dans la session, rien d'autre. Si vous placez un objet complet dans la session (comme dans votre exemple ci-dessus), il prendra autant d'espace que nécessaire pour sérialiser l'objet ... – averell

0

Oui, vous avez raison. Le problème peut survenir si vous continuez d'ajouter des données à la session. Mais il y a d'autres choses qui l'affectent.

Une fois, je me suis retrouvé avec l'erreur CookieOverflow, et la raison en était les messages flash [: notice].

Si vous utilisez flash [: notice] = "message", puis rediriger, le texte "message" sera stocké dans le cookie. Si la taille du texte est supérieure à 4 Ko, vous obtenez l'erreur "CookieOverflow"