Djangoで、request.sessionセッションIDを見つけて変数として使用するにはどうすればよいですか?


88

を使用してセッション変数を取得できることは承知していますがrequest.session['variable_name']、同様の方法でセッションIDを変数として取得する方法はないようです。これはどこかに文書化されていますか?見つかりません。ご協力いただきありがとうございます!

回答:


142

はるかに簡単:

request.session.session_key

キーは、セッション、キー、セッションがない場合にのみ存在することに注意してください。これを使用して、セッションが存在するかどうかをテストできます。セッションを作成する場合は、createを呼び出します。


3
@VebjornLjosa何をしますか?
aehlke 2012

3
@aehike:request.session._session_key@Viniciusからの回答どおり
ヒューズ

3
request.session.session_keyDjango1.6では正常に動作します。
ecstaticpeon 2014

9
request.session.session_keyDjango1.7でも正常に動作します。
アンドリューE

3
request.session._get_or_create_session_key()IDがまだない場合があるので、私は使用することを好みます。
patroqueeet 2016

24

Djangoセッションは、キーをCookieに保存します。少なくともそのミドルウェアは次のようにそれを抽出します:

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

1
ただし、セッションキーが存在しない場合、これは役に立ちません。
グレッグ

19

Django> = 1.4で使用:

request.session._session_key

9
えーと、プライベート変数(アンダースコアで始まるもの)の主な目的は、それらを使用してはならないということです。
のMichałGórny

1
@MichałGórnyでは、代替手段は何ですか?何もない場合、私たちはどのように選択肢があるのか​​わかりません...
マーク

1
別の方法は、適切なコードを書くことです。djangoがセッションキーを取得するためのパブリックAPIを提供していない場合、それは単にそのキーを使用することになっていないことを意味します。あなたが何をしようとしているのかを正確に知らなければ、これ以上話すことはできませんが、それはおそらく別の質問の分野です。
のMichałGórny

12

これにより、セッションIDを取得するか、セッションIDを作成します。そうすれば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()


6

セッションキーを確実に取得するには、最初にセッションが作成されていることを確認する必要があります。ドキュメントに.create()、セッションキーがあることを確認するために使用できるセッションメソッドが記載されています。

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

    print(request.session.session_key)

3

Django 1.8の場合:

request.session.session_key

そして

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.