Dans Django, comment puis-je trouver l'identifiant de session request.session et l'utiliser comme variable?

88

Je suis conscient que vous pouvez utiliser des variables de session request.session['variable_name'], mais il ne semble pas y avoir de moyen de saisir l'identifiant de session comme une variable de la même manière. Est-ce documenté quelque part? Je ne peux pas le trouver. Merci de votre aide!

rmh
la source

Réponses:

142

Beaucoup plus simple:

request.session.session_key

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

Dalore
la source
3
@VebjornLjosa qu'est-ce que c'est?
aehlke
3
@aehike: request.session._session_keyselon la réponse de @Vinicius
hughes
3
request.session.session_keyfonctionne bien dans Django 1.6.
ecstaticpeon
9
request.session.session_keyfonctionne également très bien dans Django 1.7.
Andrew E
3
Je préfère utiliser request.session._get_or_create_session_key()car, il peut arriver qu'il n'y ait pas encore d'identifiant.
patroqueeet
24

Les sessions Django enregistrent leur clé dans un cookie. Au moins son middleware l'extrait comme ceci:

from django.conf import settings
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
che
la source
1
Cela n'aide pas si la clé de session n'existe pas.
Greg
19

dans Django> = 1.4 utilisez:

request.session._session_key
Vinicius
la source
9
Euh, l'intention principale des variables privées (celles commençant par un trait de soulignement) est de ne pas les utiliser.
Michał Górny
1
@ MichałGórny alors quelle est l'alternative? s'il n'y en a pas, je ne vois pas comment nous avons le choix ...
Marc
1
L'alternative est d'écrire le code approprié. Si django ne fournit pas d' API publique 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 exactement ce que vous essayez de faire, mais c'est probablement un champ pour une question distincte.
Michał Górny
12

Cela vous permettra d'obtenir un identifiant de session ou d'en créer un pour vous. Si vous le 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()
vijay shanker
la source
7

Utilisation:

request.COOKIES['sessionid']
Harold
la source
6

Pour obtenir la clé de session de manière fiable, vous devez d'abord vous assurer que la session a été créée. La documentation mentionne une .create()méthode de session, qui peut être utilisée pour s'assurer qu'il existe une clé de session:

def my_view(request):
    if not request.session.session_key:
        request.session.create()

    print(request.session.session_key)
Greg
la source
3

Dans Django 1.8:

request.session.session_key

et

request.session._session_key

Les deux fonctionnent correctement.

Sarthak Agrawal
la source
-1

Vous pouvez également enregistrer vos sessions :

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Omid reza
la source