2009-02-08 12 views

Respuesta

115

mucho más sencillo:

request.session.session_key 

Nota sólo existe la clave si hay una sesión, ninguna tecla, sin sesión Puede usar esto para probar si existe una sesión. Si quieres crear una sesión, llama a create.

+3

A partir de Django 1.4, esto ya no funciona. –

+3

@VebjornLjosa ¿qué hace? – aehlke

+3

@aehike: 'request.session._session_key' según la respuesta de @Vinicius – hughes

23

Las sesiones de Django guardan su clave en una cookie. Al menos su middleware extrae de esta manera:

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

esto no ayuda si la sesión la clave no existe sin embargo. – Greg

4

Uso:

request.COOKIES['sessionid'] 
9

Esto le proporcionará 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() 
18

en Django> = 1.4 uso:

request.session._session_key 
+9

Erm, la intención principal de las variables privadas (las que comienzan con un guión bajo) es que ** no ** debes usarlas. –

+1

@ MichałGórny, ¿cuál es la alternativa? si no hay ninguno, no veo cómo podemos elegir ... – Mark

+1

La alternativa es escribir el código correcto. Si django no proporciona una API * public * para obtener la clave de sesión, simplemente significa que no debe usar esa clave. No puedo contarle más sin saber exactamente qué está tratando de hacer, pero probablemente sea un campo para una pregunta por separado. –

1

En Django 1.8:

request.session.session_key

y

request.session._session_key

Ambos trabajan correctamente.

4

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

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

    print(request.session.session_key) 
0

Puede cheque en sus sesiones de también:

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