2009-02-08 3 views
67

मुझे पता है कि आप request.session['variable_name'] का उपयोग कर सत्र चर प्राप्त कर सकते हैं, लेकिन ऐसा लगता है कि सत्रिक को समान रूप से एक चर के रूप में पकड़ने का कोई तरीका नहीं लगता है। क्या यह कहीं भी दस्तावेज है? मुझे यह नहीं मिल रहा है। आपकी सहायताके लिए धन्यवाद!Django में, मैं request.session sessionid को कैसे ढूंढ सकता हूं और इसे एक चर के रूप में उपयोग कर सकता हूं?

उत्तर

115

बहुत सरल:

request.session.session_key 

नोट अगर वहाँ एक सत्र है कुंजी केवल उपलब्ध नहीं होगा, कोई कुंजी, कोई सत्र नहीं यदि कोई सत्र मौजूद है तो आप इसका परीक्षण करने के लिए इसका उपयोग कर सकते हैं। यदि आप एक सत्र बनाना चाहते हैं, तो कॉल करें।

+3

Django 1.4 के रूप में, यह अब काम नहीं करता है। –

+3

@VebjornLjosa क्या करता है? – aehlke

+3

@Aehike: @ request.session._session_key' @Vinicius – hughes

23

Django सत्र कुकी में अपनी कुंजी को सहेजते हैं। कम से कम अपनी मिडलवेयर इस तरह यह अर्क:

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

इस सत्र में अगर मदद नहीं करता है The documentation एक .create() सत्र विधि है, जो वहाँ एक सत्र कुंजी सुनिश्चित करने के लिए इस्तेमाल किया जा सकता का उल्लेख है कुंजी मौजूद नहीं है हालांकि। – Greg

9

यह आपको या तो सत्र आईडी प्राप्त करेगा या आपके लिए एक बना देगा। यदि आप 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() 
18
Django> = 1.4 उपयोग में

:

request.session._session_key 
+9

एआरएम देखें, निजी चर के मुख्य उद्देश्य (अंडरस्कोर से शुरू होने वाले) यह है कि आपको ** ** ** उनका उपयोग नहीं करना चाहिए। –

+1

@ MichałGórny तो विकल्प क्या है? यदि कोई नहीं है, तो मुझे नहीं लगता कि हमारे पास कोई विकल्प है ... – Mark

+1

विकल्प उचित कोड लिखना है। यदि django सत्र कुंजी प्राप्त करने के लिए * सार्वजनिक * एपीआई प्रदान नहीं करता है, तो इसका मतलब है कि आपको उस कुंजी का उपयोग नहीं करना चाहिए। मैं यह जानने के बिना आपको और नहीं बता सकता कि आप वास्तव में क्या करने की कोशिश कर रहे हैं लेकिन फिर यह अलग प्रश्न के लिए शायद एक क्षेत्र है। –

1

Django 1.8 में:

request.session.session_key

और

request.session._session_key

दोनों सही ढंग से काम करते हैं।

4

विश्वसनीय रूप से सत्र कुंजी प्राप्त करने के लिए, आपको यह सुनिश्चित करना होगा कि सत्र पहले बनाया गया हो।

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

    print(request.session.session_key) 
0

आप अपने सत्र भी में जांच कर सकते हैं::

If "var" in request.session: 
     Var = request.session['var'] 
     Return httpResponse("set") 
Else: 
     Return httpResponse("there isn't") 
संबंधित मुद्दे

 संबंधित मुद्दे