How can I find out the request.session sessionid and use it as a variable?
DjangoSessionSessionidDjango Problem Overview
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 as a variable in a similar way. Is this documented anywhere? I can't find it.
Django Solutions
Solution 1 - Django
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.
Solution 2 - Django
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]
Solution 3 - Django
in Django >= 1.4 use:
request.session._session_key
Solution 4 - Django
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()
Solution 5 - Django
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)
Solution 6 - Django
Use:
request.COOKIES['sessionid']
Solution 7 - Django
In Django 1.8: >request.session.session_key
and
>request.session._session_key
Both work correctly.
Solution 8 - Django
You can check in your sessions too:
If "var" in request.session:
Var = request.session['var']
Return httpResponse("set")
Else:
Return httpResponse("there isn't")