我知道您可以使用 获取会话变量request.session['variable_name']
,但似乎没有办法以类似的方式将会话 ID 作为变量获取。这在任何地方都有记录吗?我找不到它。
richardhenry
问问题
68520 次
8 回答
163
request.session.session_key
请注意,只有存在会话、没有密钥、没有会话时,密钥才会存在。您可以使用它来测试会话是否存在。如果要创建会话,请调用 create。
于 2009-02-23T16:47:20.173 回答
25
Django 会话将其密钥保存在 cookie 中。至少它的中间件是这样提取的:
from django.conf import settings
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
于 2009-02-08T18:41:29.157 回答
19
在 Django >= 1.4 中使用:
request.session._session_key
于 2013-02-02T06:47:53.880 回答
13
这将为您获取会话 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()
于 2013-02-01T13:14:40.660 回答
9
要可靠地获取会话密钥,您需要确保首先创建了会话。该文档提到了一个.create()
会话方法,可用于确保有一个会话密钥:
def my_view(request):
if not request.session.session_key:
request.session.create()
print(request.session.session_key)
于 2016-09-25T22:42:12.017 回答
8
采用:
request.COOKIES['sessionid']
于 2009-02-09T04:36:47.973 回答
3
在 Django 1.8 中:
request.session.session_key
和
request.session._session_key
两者都能正常工作。
于 2016-06-17T09:36:45.213 回答
-1
您也可以签入您的会话:
If "var" in request.session:
Var = request.session['var']
Return httpResponse("set")
Else:
Return httpResponse("there isn't")
于 2017-03-11T19:52:15.123 回答