장고에서 어떻게 request.session 세션 ID를 찾아 변수로 사용할 수 있습니까?


88

을 사용하여 세션 변수를 얻을 수 있다는 것을 알고 request.session['variable_name']있지만 비슷한 방법으로 sessionid를 변수로 가져 오는 방법이없는 것 같습니다. 문서화되어 있습니까? 찾을 수 없습니다. 당신의 도움을 주셔서 감사합니다!

답변:


142

훨씬 간단합니다.

request.session.session_key

키는 세션이 있거나 키가 없거나 세션이없는 경우에만 존재합니다. 이를 사용하여 세션이 있는지 테스트 할 수 있습니다. 세션을 생성하려면 create를 호출합니다.


3
@VebjornLjosa 뭐야?
aehlke

3
@aehike : request.session._session_key@Vinicius의 대답에 따라
휴즈

3
request.session.session_keyDjango 1.6에서 잘 작동합니다.
ecstaticpeon

9
request.session.session_keyDjango 1.7에서도 잘 작동합니다.
Andrew E

3
request.session._get_or_create_session_key()아직 ID가없는 경우가 발생할 수 있기 때문에 사용하는 것을 선호합니다 .
patroqueeet

24

Django 세션은 쿠키에 키를 저장합니다. 적어도 미들웨어는 다음과 같이 추출합니다.

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 2013

1
@ MichałGórny 그래서 대안은 무엇입니까? 없는 경우 선택의 여지가 없는지 모르겠습니다 ...
Mark

1
대안은 적절한 코드를 작성하는 것입니다. django가 세션 키를 얻기 위한 공개 API를 제공하지 않는다면 , 단순히 해당 키를 사용해서는 안된다는 의미입니다. 정확히 무엇을 하려는지 모른 채 더 많이 말할 수는 없지만 아마도 별도의 질문에 대한 필드 일 것입니다.
Michał Górny

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")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.