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!

rmh
sumber

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.

dalore
sumber
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]
che
sumber
1
Ini tidak membantu jika kunci sesi tidak ada.
Greg
19

di Django> = 1.4 gunakan:

request.session._session_key
Vinicius
sumber
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()
vijay shanker
sumber
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)
Greg
sumber
7

Menggunakan:

request.COOKIES['sessionid']
Harold
sumber
3

Di Django 1.8:

request.session.session_key

dan

request.session._session_key

Keduanya bekerja dengan benar.

Sarthak Agrawal
sumber
-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")
Omid reza
sumber