No Django, como posso descobrir o sessionid request.session e usá-lo como uma variável?


88

Estou ciente de que você pode obter variáveis ​​de sessão usando request.session['variable_name'], mas não parece haver uma maneira de capturar a id de sessão como uma variável de maneira semelhante. Isso está documentado em algum lugar? Eu não consigo encontrar. Obrigado pela ajuda!

Respostas:


142

Muito mais simples:

request.session.session_key

Observe que a chave só existirá se houver uma sessão, sem chave, sem sessão. Você pode usar isso para testar se existe uma sessão. Se você quiser criar uma sessão, ligue para criar.


3
@VebjornLjosa o que faz?
aehlke de

3
@aehike: de request.session._session_keyacordo com a resposta de @Vinicius
hughes de

3
request.session.session_keyfunciona bem no Django 1.6.
ecstaticpeon

9
request.session.session_keytambém funciona bem no Django 1.7.
Andrew E

3
Prefiro usar request.session._get_or_create_session_key()porque, pode acontecer que ainda não haja um ID.
patroqueeet de

24

As sessões do Django salvam sua chave em um cookie. Pelo menos seu middleware o extrai assim:

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

1
Isso não ajuda se a chave de sessão não existir.
Greg

19

no Django> = 1.4 use:

request.session._session_key

9
Erm, o objetivo principal das variáveis ​​privadas (aquelas que começam com um sublinhado) é que você não deve usá-las.
Michał Górny

1
@ MichałGórny então qual é a alternativa? se não houver nenhum, não vejo como temos escolha ...
Marcos

1
A alternativa é escrever o código adequado. Se o django não fornecer uma API pública para obter a chave de sessão, significa simplesmente que você não deve usar essa chave. Não posso dizer mais nada sem saber o que exatamente você está tentando fazer, mas provavelmente é um campo para perguntas separadas.
Michał Górny

12

Isso lhe dará um ID de sessão ou criará um para você. Se o fizer dir(request.session), obterá muitos métodos úteis.

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

Para obter a chave de sessão de forma confiável, você precisa ter certeza de que a sessão foi criada primeiro. A documentação menciona um .create()método de sessão, que pode ser usado para garantir que haja uma chave de sessão:

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

    print(request.session.session_key)

3

No Django 1.8:

request.session.session_key

e

request.session._session_key

Ambos funcionam corretamente.


-1

Você também pode verificar suas sessões :

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.