En Django, ¿cómo puedo averiguar el id de sesión request.session y usarlo como variable?

88

Soy consciente de que puede obtener variables de sesión usando request.session['variable_name'], pero no parece haber una forma de tomar el id de sesión como variable de una manera similar. ¿Está esto documentado en alguna parte? No lo encuentro. ¡Gracias por tu ayuda!

rmh
fuente

Respuestas:

142

Mucho más simple:

request.session.session_key

Tenga en cuenta que la clave solo existirá si hay una sesión, sin clave, sin sesión. Puede usar esto para probar si existe una sesión. Si desea crear una sesión, llame a crear.

dalore
fuente
3
@VebjornLjosa ¿qué hace?
aehlke
3
@aehike: request.session._session_keysegún la respuesta de @Vinicius
hughes
3
request.session.session_keyfunciona bien en Django 1.6.
éxtasis el
9
request.session.session_keytambién funciona bien en Django 1.7.
Andrew E
3
Prefiero usarlo request.session._get_or_create_session_key()porque puede suceder que todavía no haya una identificación.
patroqueeet
24

Las sesiones de Django guardan su clave en una cookie. Al menos su middleware lo extrae así:

from django.conf import settings
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
che
fuente
1
Sin embargo, esto no ayuda si la clave de sesión no existe.
Greg
19

en Django> = 1.4 use:

request.session._session_key
Vinicius
fuente
9
Erm, la intención principal de las variables privadas (aquellas que comiencen con un guión) es que debe no usarlos.
Michał Górny
1
@ MichałGórny, ¿cuál es la alternativa? si no hay ninguno, no veo cómo tenemos una opción ...
Marcos
1
La alternativa es escribir el código adecuado. Si django no proporciona una API pública para obtener la clave de sesión, simplemente significa que se supone que no debes usar esa clave. No puedo decirle más sin saber exactamente qué está tratando de hacer, pero probablemente sea un campo para una pregunta separada.
Michał Górny
12

Esto le dará un ID de sesión o creará uno para usted. Si lo hace dir(request.session), obtendrá muchos métodos útiles.

['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
fuente
7

Utilizar:

request.COOKIES['sessionid']
Harold
fuente
6

Para obtener la clave de sesión de manera confiable, primero debe asegurarse de que la sesión se haya creado. La documentación menciona un .create()método de sesión, que puede usarse para asegurarse de que haya una clave de sesión:

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

    print(request.session.session_key)
Greg
fuente
3

En Django 1.8:

request.session.session_key

y

request.session._session_key

Ambos funcionan correctamente.

Sarthak Agrawal
fuente
-1

También puedes consultar tus sesiones :

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