В Django, как я могу узнать идентификатор сеанса request.session и использовать его в качестве переменной? - PullRequest
78 голосов
/ 08 февраля 2009

Я знаю, что вы можете получить переменные сеанса, используя request.session['variable_name'], но, похоже, не существует способа получить идентификатор сеанса как переменную аналогичным образом. Это где-нибудь задокументировано? Я не могу найти это. Спасибо за вашу помощь!

Ответы [ 8 ]

125 голосов
/ 23 февраля 2009

Намного проще:

request.session.session_key

Обратите внимание, что ключ будет существовать, только если есть сеанс, нет ключа, нет сеанса. Вы можете использовать это, чтобы проверить, существует ли сессия. Если вы хотите создать сеанс, вызовите create.

23 голосов
/ 08 февраля 2009

Сеансы Django сохраняют свои ключи в куки. По крайней мере его промежуточное программное обеспечение извлекает его так:

from django.conf import settings
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
19 голосов
/ 02 февраля 2013

в Джанго> = 1.4 использовать:

request.session._session_key
11 голосов
/ 01 февраля 2013

Это либо даст вам идентификатор сеанса, либо создаст его для вас. Если вы сделаете dir(request.session), вы получите много полезных методов.

['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()
5 голосов
/ 26 сентября 2016

Чтобы надежно получить ключ сеанса, вы должны убедиться, что сеанс был создан первым. В документации упоминается метод сеанса .create(), который можно использовать для проверки наличия ключа сеанса:

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

    print(request.session.session_key)
4 голосов
/ 09 февраля 2009

Использование:

request.COOKIES['sessionid']
3 голосов
/ 17 июня 2016

В Django 1.8:

request.session.session_key

и

request.session._session_key

Оба работают правильно.

0 голосов
/ 11 марта 2017

Вы можете проверить свои сессии тоже:

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...