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.