Di Django, bagaimana saya bisa menemukan request.session sessionid dan menggunakannya sebagai variabel?


89

Saya sadar bahwa Anda bisa mendapatkan variabel sesi menggunakan request.session['variable_name'], tetapi tampaknya tidak ada cara untuk mengambil sessionid sebagai variabel dengan cara yang serupa. Apakah ini didokumentasikan di mana saja? Saya tidak dapat menemukannya. Terima kasih atas bantuan Anda!

Jawaban:


145

Jauh lebih sederhana:

request.session.session_key

Perhatikan bahwa kunci hanya akan ada jika ada sesi, tidak ada kunci, tidak ada sesi. Anda dapat menggunakan ini untuk menguji apakah ada sesi. Jika Anda ingin membuat sesi, panggil buat.


3
@aehike: request.session._session_keysesuai jawaban dari @Vinicius
hughes

3
request.session.session_keyberfungsi dengan baik di Django 1.6.
ecstaticpeon

9
request.session.session_keyjuga berfungsi dengan baik di Django 1.7.
Andrew E

3
Saya lebih suka menggunakan request.session._get_or_create_session_key()karena, bisa saja belum ada ID.
patroqueeet

2
Apakah ini berfungsi atau tidak sepenuhnya tergantung pada apakah sesi telah dibuat. Lihat jawaban saya
Greg

25

Sesi Django menyimpan kunci mereka dalam sebuah cookie. Setidaknya middleware-nya mengekstraknya seperti ini:

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

1
Ini tidak membantu jika kunci sesi tidak ada.
Greg

19

di Django> = 1.4 gunakan:

request.session._session_key

9
Erm, maksud utama variabel privat (yang dimulai dengan garis bawah) adalah Anda tidak boleh menggunakannya.
Michał Górny

1
@ MichałGórny jadi apa alternatifnya? jika tidak ada, saya tidak mengerti bagaimana kita punya pilihan ...
Tandai

1
Alternatifnya adalah menulis kode yang tepat. Jika django tidak menyediakan API publik untuk mendapatkan kunci sesi, itu berarti Anda tidak seharusnya menggunakan kunci itu. Saya tidak dapat memberi tahu Anda lebih banyak tanpa mengetahui apa yang sebenarnya Anda coba lakukan, tetapi mungkin itu adalah bidang untuk pertanyaan terpisah.
Michał Górny

12

Ini akan memberi Anda ID sesi atau membuatnya untuk Anda. Jika Anda melakukannya dir(request.session), Anda akan mendapatkan banyak metode yang berguna.

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

8

Untuk mendapatkan kunci sesi dengan andal, Anda perlu memastikan sesi telah dibuat terlebih dahulu. Dokumentasi menyebutkan .create()metode sesi, yang dapat digunakan untuk memastikan ada kunci sesi:

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

    print(request.session.session_key)


3

Di Django 1.8:

request.session.session_key

dan

request.session._session_key

Keduanya bekerja dengan benar.


-1

Anda juga dapat memeriksa sesi Anda :

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.