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!

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.


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]

1
Cela n'aide pas si la clé de session n'existe pas.
Greg

19

dans Django> = 1.4 utilisez:

request.session._session_key

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()


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)

3

Dans Django 1.8:

request.session.session_key

et

request.session._session_key

Les deux fonctionnent correctement.


-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")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.