11
votes

Commande d'effacer le magasin de session basé sur les cookies dans des rails

Je veux souvent effacer le magasin de session dans des rails, en particulier, le magasin de session de cookie par défaut. Certains sites semblent suggérer que

rake tmp:sessions:clear


0 commentaires

5 Réponses :


3
votes

Cela me survient maintenant que ce que je veux peut-être ne pas être possible en fonction de la mise en œuvre du magasin basé sur les cookies. Si les cookies contiennent toutes les informations dont le serveur a besoin (y compris une signature pour l'intégrité des données), le serveur n'a pas besoin de stocker des informations de son côté, il n'existe aucun moyen d'invalider les cookies existants. J'avais supposé que le cookie contenait une clé qui correspondait à des données sur le côté serveur afin de vérifier que le cookie est valide, mais je me rends compte que cela peut ne pas être le cas.

Si cela est vrai, le seul moyen de nettoyer les cookies serait de modifier le secret de la cookie côté serveur utilisé pour la signature, puis redémarrez le processus serveur.


1 commentaires

Modifié config.secret_Token et redémarré le serveur. Les sessions de cookies ont été réinitialisées. Résultat.



8
votes

Le problème est que les cookies sont du côté du client. Exécution d'une tâche de râteau sur votre serveur ne supprimera pas les cookies sur toutes les machines qui ont visité la page Web, évidemment.

Peut-être que vous pouvez utiliser session.clear dans vos contrôleurs en quelque sorte? Vous avez raison de changer la clé de cookie, cependant. Cela invaliderait toute session appartenant à l'ancienne clé. Vous devriez sauver de actionController :: StateSession (ou quelque chose comme ça), mais cela fonctionnerait.


1 commentaires

Droite, comme j'ai fait allusion dans mon commentaire, j'étais sous l'impression erronée que le cookie ne conserve que quelque sorte de jeton de session entre le client et le serveur et que le jeton est également stocké sur le côté serveur afin de valider le client. jeton ou les données sont sur le côté serveur. Temporairement, j'ai juste une solution de contournement dans mon code pour ignorer la session. Peut-être que la chose la plus facile est de passer à un magasin de biscuits soutenu sur des bases de données pour l'environnement de développement (je souhaite effacer les sessions juste à des fins de développement).



9
votes

changer le nom du cookie de session. Cela ne supprimera pas les vieux cookies, mais cela obligera tout le monde à obtenir un nouveau cookie de session.


0 commentaires

27
votes

Si vous utilisez des sessions à base de cookie

Vous pouvez modifier la application Secret_Tokok of Your Rails. Cela invalidera toutes les sessions existantes. xxx

puis copiez la valeur dans xxx

thats. N'oubliez pas de redémarrer votre application après cela;)

Si vous utilisez des sessions basées sur la base de données xxx

si vous utilisez Sessions basées sur des fichiers xxx


1 commentaires

Je devais copier la valeur à secrète_token.rb



1
votes

Si vous exécutez ceci sur un serveur de production, je vous recommande:

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>


0 commentaires