У Django, як я можу дізнатися request.session sessionid і використовувати його як змінну?


88

Я знаю, що ви можете отримати змінні сеансу, використовуючи request.session['variable_name'], але, схоже, не існує способу схопити sessionid як змінну подібним чином. Це десь задокументовано? Не можу знайти. Спасибі за вашу допомогу!

Відповіді:


142

Набагато простіше:

request.session.session_key

Зверніть увагу, що ключ буде існувати лише у тому випадку, якщо є сеанс, немає ключа, немає сеансу. Ви можете використовувати це, щоб перевірити, чи існує сеанс. Якщо ви хочете створити сеанс, зателефонуйте створити.


3
@VebjornLjosa що робить?
aehlke

3
@aehike: request.session._session_keyвідповідно до відповіді від @Vinicius
hughes

3
request.session.session_keyчудово працює в Django 1.6.
ecstaticpeon

9
request.session.session_keyтакож чудово працює в Django 1.7.
Ендрю Е

3
Я віддаю перевагу використанню, request.session._get_or_create_session_key()тому що може трапитися так, що ще немає ідентифікатора.
patroqueeet

24

Сеанси Django зберігають свій ключ у файлі cookie. Принаймні його проміжне програмне забезпечення витягує це так:

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

1
Це не допомагає, якщо ключ сеансу не існує.
Грег

19

у Django> = 1,4 використання:

request.session._session_key

9
Е-м-м, головним наміром приватних змінних (тих, що починаються з підкреслення) є те, що ви не повинні їх використовувати.
Michał Górny

1
@ MichałGórny, то яка альтернатива? якщо його немає, я не розумію, як у нас є вибір ...
Позначте

1
Альтернативою є написання належного коду. Якщо django не надає загальнодоступний API для отримання ключа сеансу, це просто означає, що ви не повинні використовувати цей ключ. Я не можу сказати вам більше, не знаючи, що саме ви намагаєтесь зробити, але тоді це, мабуть, поле для окремого запитання.
Michał Górny

12

Це або отримає вам ідентифікатор сеансу, або створить його для вас. Якщо ви це зробите 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()


6

Щоб надійно отримати ключ сеансу, вам потрібно переконатися, що сесія була створена спочатку. У документації згадується .create()метод сеансу, за допомогою якого можна переконатися, що є ключ сеансу:

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

    print(request.session.session_key)


-1

Ви також можете перевірити свої сеанси :

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.