Django'da request.session oturum kimliğini nasıl bulabilirim ve onu bir değişken olarak kullanabilirim?


89

Kullanarak oturum değişkenlerini alabileceğinizin farkındayım request.session['variable_name'], ancak oturum kimliğini benzer şekilde değişken olarak almanın bir yolu yok gibi görünüyor. Bu herhangi bir yerde belgelendi mi? Bulamıyorum Yardımınız için teşekkürler!

Yanıtlar:


145

Çok daha basit:

request.session.session_key

Anahtarın yalnızca oturum varsa, anahtar yoksa veya oturum yoksa var olacağını unutmayın. Bunu, bir oturumun olup olmadığını test etmek için kullanabilirsiniz. Bir oturum oluşturmak istiyorsanız, oluştur'u arayın.


3
@aehike: request.session._session_key@Vinicius'un cevabına göre
hughes

3
request.session.session_keyDjango 1.6'da iyi çalışıyor.
ecstaticpeon

9
request.session.session_keyDjango 1.7'de de iyi çalışıyor.
Andrew E

3
Kullanmayı tercih ederim request.session._get_or_create_session_key()çünkü henüz bir kimlik yok olabilir.
patroqueeet

2
Bunun çalışıp çalışmadığı tamamen oturumun oluşturulup oluşturulmadığına bağlıdır. Cevabımı görün
Greg

25

Django oturumları anahtarlarını bir tanımlama bilgisine kaydeder. En azından ara katman yazılımı şu şekilde çıkarır:

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

1
Yine de oturum anahtarı yoksa bu yardımcı olmaz.
Greg

19

Django'da> = 1.4 kullan:

request.session._session_key

9
Erm, özel değişkenler (bir alt çizgi ile başlayan olanlar) ana niyet sen gerektiğidir değil bunları kullanın.
Michał Górny

1
@ MichałGórny yani alternatif nedir? eğer yoksa, nasıl bir seçeneğimiz olduğunu anlamıyorum ...
Mark

1
Alternatif, doğru kod yazmaktır. Django , oturum anahtarını almak için genel bir API sağlamazsa , bu yalnızca o anahtarı kullanmamanız gerektiği anlamına gelir. Tam olarak ne yapmaya çalıştığınızı bilmeden size daha fazlasını söyleyemem ama o zaman bu muhtemelen ayrı bir soru için bir alan.
Michał Górny

12

Bu size bir oturum kimliği alacak veya sizin için bir tane oluşturacaktır. Bunu yaparsanız dir(request.session), birçok faydalı yöntem elde edersiniz.

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

Oturum anahtarını güvenilir bir şekilde almak için önce oturumun oluşturulduğundan emin olmanız gerekir. Dokümantasyon , .create()bir oturum anahtarı olduğundan emin olmak için kullanılabilecek bir oturum yönteminden bahseder :

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

    print(request.session.session_key)


3

Django 1.8'de:

request.session.session_key

ve

request.session._session_key

Her ikisi de doğru çalışıyor.


-1

Seanslarınızı da kontrol edebilirsiniz :

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.