110 votes

Comment puis-je trouver le sessionid de request.session et l'utiliser comme variable ?

Je sais qu'il est possible d'obtenir des variables de session à l'aide de request.session['variable_name'] mais il ne semble pas y avoir de moyen de récupérer l'identifiant de la session en tant que variable de la même manière. Est-ce que c'est documenté quelque part ? Je ne le trouve pas.

178voto

dalore Points 1029
request.session.session_key

Notez que la clé n'existe que s'il y a une session, pas de clé, pas de session. Vous pouvez l'utiliser pour tester l'existence d'une session. Si vous souhaitez créer une session, appelez create.

3 votes

@aehike : request.session._session_key conformément à la réponse de @Vinicius

3 votes

request.session.session_key fonctionne correctement dans Django 1.6.

9 votes

request.session.session_key fonctionne également très bien dans Django 1.7.

25voto

che Points 6899

Les sessions Django enregistrent leur clé dans un cookie. Du moins, son intergiciel l'extrait de cette manière :

from django.conf import settings
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]

1 votes

Cela ne sert à rien si la clé de session n'existe pas.

20voto

Vinicius Points 179

Dans Django >= 1.4 utiliser :

request.session._session_key

12 votes

Erm, l'objectif principal des variables privées (celles qui commencent par un trait de soulignement) est que vous devez no les utiliser.

1 votes

@MichaGórny alors quelle est l'alternative ? s'il n'y en a pas, je ne vois pas comment nous avons le choix...

1 votes

L'alternative est d'écrire un code correct. Si django ne fournit pas de fonction public pour obtenir la clé de session, cela signifie simplement que vous n'êtes pas censé utiliser cette clé. Je ne peux pas vous en dire plus sans savoir ce que vous essayez de faire exactement, mais il s'agit probablement d'une question distincte.

13voto

vijay shanker Points 395

Cela vous permettra d'obtenir un identifiant de session ou d'en créer un pour vous. Si vous faites dir(request.session) vous obtiendrez de nombreuses méthodes utiles.

['TEST_COOKIE_NAME', 'TEST_COOKIE_VALUE', '__class__', '__contains__',
'__delattr__', '__delitem__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__getitem__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 
'_get_new_session_key', '_get_or_create_session_key', '_get_session',
'_get_session_key', '_hash', '_session', '_session_key', 'accessed',
'clear', 'create', 'cycle_key', 'decode', 'delete', 'delete_test_cookie',
'encode', 'exists', 'flush', 'get', 'get_expire_at_browser_close',
'get_expiry_age', 'get_expiry_date', 'has_key', 'items', 'iteritems',
'iterkeys', 'itervalues', 'keys', 'load', 'modified', 'pop', 'save',
'session_key', 'set_expiry', 'set_test_cookie', 'setdefault',
'test_cookie_worked', 'update', 'values']

session_id = request.session._get_or_create_session_key()

9voto

Harold Points 2561

Utiliser :

request.COOKIES['sessionid']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X