在Django中,如何找出request.session sessionid并将其用作变量?


88

我知道您可以使用来获取会话变量request.session['variable_name'],但是似乎没有一种以类似方式将sessionid作为变量获取的方法。这在任何地方都有记录吗?我找不到 谢谢你的帮助!

Answers:


142

简单得多:

request.session.session_key

请注意,只有在有会话,无密钥,无会话的情况下,密钥才会存在。您可以使用它来测试会话是否存在。如果要创建会话,请致电创建。


3
@VebjornLjosa是什么?
aehlke 2012年

3
@aehike:request.session._session_key按照从@Vinicius答案
休斯

3
request.session.session_key在Django 1.6中可以正常工作。
ecstaticpeon 2014年

9
request.session.session_key在Django 1.7中也可以正常工作。
Andrew E

3
我更喜欢使用,request.session._get_or_create_session_key()因为可能还没有ID。
patroqueeet '16

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órny13年

1
@MichałGórny那么有什么选择?如果没有,我不知道我们该如何选择...
马克

1
另一种方法是编写适当的代码。如果django不提供公共API来获取会话密钥,则仅意味着您不应该使用该密钥。我不能不告诉您更多信息,除非您确切知道您要尝试做什么,但这可能是一个单独问题的领域。
米哈尔戈尔诺-

12

这将为您获取一个会话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)


-1

您也可以签入会话

If "var" in request.session:
       Var = request.session['var']
        Return httpResponse("set")
Else:
       Return httpResponse("there isn't")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.