ใน Django ฉันจะค้นหา sessionid request.session และใช้เป็นตัวแปรได้อย่างไร


89

ฉันทราบว่าคุณสามารถรับตัวแปรเซสชันได้โดยใช้request.session['variable_name']แต่ดูเหมือนจะไม่มีวิธีที่จะดึง sessionid มาเป็นตัวแปรในลักษณะเดียวกัน เอกสารนี้อยู่ที่ใด ฉันหาไม่เจอ ขอบคุณสำหรับความช่วยเหลือของคุณ!

คำตอบ:


145

ง่ายกว่ามาก:

request.session.session_key

หมายเหตุคีย์จะมีอยู่ก็ต่อเมื่อมีเซสชันไม่มีคีย์ไม่มีเซสชัน คุณสามารถใช้สิ่งนี้เพื่อทดสอบว่ามีเซสชันอยู่หรือไม่ หากคุณต้องการสร้างเซสชันโทรสร้าง


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
Andrew E

3
ฉันชอบใช้มากกว่าrequest.session._get_or_create_session_key()เพราะอาจเกิดขึ้นได้ว่ายังไม่มี ID
patroqueeet

2
การทำงานนี้หรือไม่ทั้งหมดขึ้นอยู่กับว่ามีการสร้างเซสชัน ดูคำตอบของฉัน
Greg

25

เซสชัน Django บันทึกคีย์ไว้ในคุกกี้ อย่างน้อยมิดเดิลแวร์จะแยกมันออกมาดังนี้:

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

1
สิ่งนี้ไม่ช่วยหากไม่มีคีย์เซสชัน
Greg

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

8

หากต้องการรับรหัสเซสชันอย่างน่าเชื่อถือคุณต้องตรวจสอบให้แน่ใจว่าได้สร้างเซสชันก่อน เอกสารประกอบกล่าวถึง.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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.