Comment effacer toutes les variables de session sans se déconnecter
Je suis en train d'effacer toutes les variables de session, mais pas déconnecter l'utilisateur actuel.
user = request.session.get('member_id', None)
request.session.flush()
request.session.modified = True
request.session['member_id'] = user
request.session.modified = True
Est-ce aussi affecter d'autres utilisateurs du site?
source d'informationauteur Siecje
Vous devez vous connecter pour publier un commentaire.
Dans Django 1.8, tout appel à la méthode flush() déconnecte l'utilisateur. À partir de la docs:
Si vous voulez être en mesure pour supprimer les clés mais gardez à l'utilisateur connecté, vous aurez besoin de gérer manuellement:
Ou de simplement supprimer les clés spécifiques qui sont source de préoccupation:
Dans les versions de django < 1.8,
session.rincer
supprime les données de la session et régénère la clé de session. Il ne sera pas affecter d'autres utilisateurs depuis les clés de session sont uniques.Comme une amélioration shacker deUn en Python 2.x
dict.keys()
renvoie une liste de copie des clés d'un dictionnaire en Python 3.x au lieu de cela, il retourne un itérateur. modification de la taille d'un itérateur est imprudent. Pour une version safe de la mise en œuvre de la coulée à la liste permettra d'éviter tout problème de taille deMa réponse précédente a suggéré l'utilisation de
dict.viewkeys()
mais il sera également de retour d'un itérateur en python 3.x.request.session
en interne utilise des cookies. Et lorsqu'un utilisateur demande une url du site, uniquement les cookies présents sur l'ordinateur de l'utilisateur est envoyé au serveur. Donc,request.session
est toujours liée à l'utilisateur actuel.Donc, cela ne va affecter les autres utilisateurs du site.
Aussi ce ne sera pas déconnecter l'utilisateur actuel, parce que vous êtes à l'aide de
flush()
qui permet de supprimer l'ancienne session et créer une nouvelle session et cette nouvelle session, qui devrait être associé à l'utilisateur actuel.flush()
utilise en interneclear()
delete()
etcreate()
.Dans la réponse de cette nouvelle session de la clé sera envoyé en tant que témoin et dans les demandes ultérieures de cette nouvelle session permettrait de continuer à travailler normalement.
Vous pouvez effacer les clés que vous avez défini dans le django session, mais le faire sans déconnecter l'utilisateur prend un peu de trickiness;
request.session.flush()
enregistre l'utilisateur. Etrequest.session = {}
en supprimant toutes les clés de la session dictionnaire sera également déconnecter l'utilisateur.Ainsi, pour effacer les touches sans déconnecter l'utilisateur, vous devez éviter les clés qui commencent par un caractère de soulignement. Le code suivant fait le truc: