У 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.