I'm aware that you can get session variables using request.session['variable_name'], but there doesn't seem to be a way to grab the session id(key) as a variable in a similar way. Is this documented anywhere? I can't find it.
9 Answers
request.session.session_key Note the key will only exist if there is a session, no key, no session. You can use this to test if a session exists. If you want to create a session, call create.
11 Comments
request.session._session_key as per the answer from @Viniciusrequest.session.session_key works fine in Django 1.6.request.session.session_key also works fine in Django 1.7.request.session._get_or_create_session_key() because, it can happen that there is just no ID yet.Django sessions save their key in a cookie. At least its middleware extracts it like this:
from django.conf import settings session_key = request.COOKIES[settings.SESSION_COOKIE_NAME] 1 Comment
in Django >= 1.4 use:
request.session._session_key 3 Comments
To reliably get the session key, you need to make sure the session has been created first. The documentation mentions a .create() session method, which can be used to make sure there's a session key:
def my_view(request): if not request.session.session_key: request.session.create() print(request.session.session_key) Comments
This will either get you a session ID or create one for you. If you do dir(request.session), you will get many useful methods.
['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() Comments
You can get the session key with session_key, _session_key and _get_session_key() in Django Views as shown below. *I use Django 4.2.1:
# "views.py" from django.http import HttpResponse def my_view(request): print(request.session.session_key) # w85oia6b5yqj5n2t6n7lpwuhw7lt7ti2 print(request.session._session_key) # w85oia6b5yqj5n2t6n7lpwuhw7lt7ti2 print(request.session._get_session_key()) # w85oia6b5yqj5n2t6n7lpwuhw7lt7ti2 return HttpResponse("Test") And, you can get the session key with request.session.session_keyin Django Templates as shown below:
{# "templates/index.html #} {{ request.session.session_key }} {# w85oia6b5yqj5n2t6n7lpwuhw7lt7ti2 #}