8:django sessions(세션)

9949 단어 session
세션
django는 익명 세션에 대한 전방위적인 지원을 제공합니다. 세션 프레임워크는 모든 사이트 방문자의 임의의 데이터를 저장하고 검색할 수 있습니다.세션 데이터는 서버에 저장되고 쿠키를 보내고 받아들이는 과정을 간단하게 설명합니다. 쿠키는 데이터 자체가 아니라session ID만 포함합니다. 쿠키 백업을 기반으로 한 세션을 사용하지 않는 한.
다음은 세션 프레임워크를 어떻게 사용하는지 살펴봅시다.
세션 사용
회화는 중간부품을 통해 이루어진다.세션 기능을 활성화하려면 MIDDLEWARECLASSES 가입django.contrib.sessions.middleware.Session Middleware는 OK.
만약django-admin을 사용한다면.py startproject에서 만든 프로젝트는 기본적으로 이 기능을 사용합니다.sessions 기능을 사용하지 않으려면 MIDDLEWARECLASS에서 해당 항목을 제거합니다.
그리고installedapps에서sessions를 제거하면 데이터베이스 공간을 조금 절약할 수 있습니다
세션 엔진 구성
기본django는 데이터베이스에 세션을 저장합니다 (django.contrib.sessions.models.Session 모형을 사용합니다)
비록 이것은 매우 편리하지만, 어떤 때는 세션을 다른 곳에 저장하면 접근이 더욱 빨라질 수 있다. 다음은 각종 세션 엔진을 설정하는 방법을 살펴보자
데이터베이스에서 지원하는 세션 사용
기본적으로 사용하는 방법은django가 필요합니다.contrib.INSTALLED 에 sessions 추가APPS 설정에
그리고 관리자를 실행합니다.py syncdb 데이터베이스에서 대응하는 테이블 생성
캐시된 세션 사용
시스템을 더 잘 하려면 캐시 기반 백엔드 처리를 고려할 수 있지만, 캐시를 사용하려면 먼저 캐시를 설정해야 한다
캐시를 설정하면 캐시에 데이터를 저장하는 두 가지 선택이 있습니다
  • django를 사용합니다.contrib.sessions.backens.cache 구성 SESSIONENGIN, 세션이 캐시에 직접 저장되므로 캐시가 가득 차거나 캐시 서버가 재부팅되면 모든 데이터가 손실됩니다
  • .
  • django를 사용합니다.contrib.sessions.backends.cached_db 구성 SESSIONENGIN, 이것은 일종의 직사식 캐시로 매번 캐시된 데이터가 데이터베이스에 기록되고 세션이 캐시에 없을 때만 데이터베이스에 접근합니다
  • 이 두 가지 선택은 모두 매우 빠르다. 첫 번째 캐치에 비해cacheddb가 더 빠릅니다. 데이터베이스 상호작용이 없기 때문입니다.그러나 일반적인 상황에서cacheddb는 이미 충분히 빠릅니다. 더 빠르면 캐치를 고려할 수 있습니다.
    주의,cacheddb도 데이터베이스에 사용해야 합니다. 위에서 데이터베이스에서 지원하는 세션을 참고하세요.
    파일 기반 세션 사용
    파일 기반 세션을 사용하려면 SESSIONENGIN을 django로 설정합니다.contrib.sessions.backends.file, 그리고 SESSION을 설정해야 할 수도 있습니다FILE_PATH는django 메모리 세션을 제어하는 곳에 가서django 서버가 그 위치를 읽을 수 있는 권한이 있는지 확인하십시오
    쿠키 기반 세션 사용
    쿠키 기반 세션을 사용하려면 SESSIONENGIN을 django로 설정합니다.contrib.sessions.backends.signed_cookies, 그 세션 데이터는django의 암호화 서명 도구와SECRET 를 사용합니다KEY가 데이터를 저장합니다.
    팁: SESSIONCOOKIE_HTTPONLY=True, 자바스크립트에 저장된 데이터에 접근하는 것을 방지합니다
    알림:
  • 세션 데이터가 서명되었지만 암호화되지 않았습니다. 클라이언트가 이 데이터를 읽거나 변경할 수 있거나 쿠키의 크기가 브라우저의 기본 길이를 초과하여 일부분을 버려지면 세션 데이터가 무효화됩니다
  • 신선도를 보장하지 않습니다. MAC(메시지 인증코드)는 데이터의 진실성과 완전성을 보장하지만 메시지의 신선성을 보장하지 못합니다. 이로 인해'재방출 공격'을 초래할 수 있습니다. 쿠키는 SESSION보다 빠를 수 있습니다COOKIE_AGE가 유행이 지난 것으로 여겨진다
  • 운영 표현: 쿠키의 크기가 당신의 사이트 방문 속도에 영향을 미친다
  • 뷰 함수에서 세션 사용
    세션 중간부품이 활성화되면 Http Request 대상 - 각django 보기 함수의 첫 번째 인자 - 세션 속성이 있습니다. 이것은 사전과 유사한 대상입니다. 보기 함수 안의 어느 곳에서든 Request를 사용할 수 있습니다.session, 여러 번 사용 가능
    다음 위조 코드는session의 표준 사전 방법을 보여 줍니다
    class backends.base.SessionBase
    
    #
    
    
    
    __getitem__(key)
    
    #Example: fav_color = request.session['fav_color']
    
    
    
    __setitem__(key, value)
    
    #Example: request.session['fav_color'] = 'blue'
    
    
    
    __delitem__(key)
    
    #Example: del request.session['fav_color'].   key   ,        ,     keyError   
    
    
    
    __contains__(key)
    
    #Example: 'fav_color' in request.session,    bool 
    
    
    
    get(key, default=None)
    
    #Example: fav_color = request.session.get('fav_color', 'red'),  get    fav_color session,fav_color=red
    
    
    
    pop(key)
    
    #Example: fav_color = request.session.pop('fav_color')
    
    #       
    
    keys()
    
    items()
    
    setdefault()
    
    clear()
    
    #        
    
    
    
    flush()
    
    #              cookie(  )  ,         key,                     ,  django.contrib.auth.logout()            。
    
    
    
    set_test_cookie()
    
    #       cookie,    test_cookie_worked  
    
    
    
    test_cookie_worked()
    
    #    set_test_cookie(),    bool  
    
    
    
    delete_test_cookie()
    
    #     cookie
    
    
    
    set_expiry(value)
    
    #         
    
    #  value   ,      ,  request.session.set_expiry(300) 
    
    #   datetime  timedelta  ,         
    
    #   None,         
    
    get_expiry_age()
    
    #           
    
    get_expiry_date()
    
    #         
    
    get_expire_at_browser_close()
    
    #           cookie     ,   bool  cookie will expire when the user’s Web browser is closed.

    세션 개체 안내서
  • request를 사용합니다.세션에서python 문자열처럼 사용하기
  • 밑줄로 시작하는 키스는django 내부에서 보류하여 사용하므로 밑줄로 시작하는 변수 이름을 사용하지 마십시오
  • Request를 덮어쓰지 마십시오.세션,python 사전 형식 데이터처럼 사용하기
  • 사용 예
    간단한 사용:session 설정 및 사용
    def post_comment(request, new_comment):
    
        if request.session.get('has_commented', False):
    
            return HttpResponse("You've already commented.")
    
        c = comments.Comment(comment=new_comment)
    
        c.save()
    
        request.session['has_commented'] = True
    
        return HttpResponse('Thanks for your comment!')

    테스트 쿠키 설정
    def login(request):
    
        if request.method == 'POST':
    
            if request.session.test_cookie_worked():
    
                request.session.delete_test_cookie()
    
                return HttpResponse("You're logged in.")
    
            else:
    
                return HttpResponse("Please enable cookies and try again.")
    
        request.session.set_test_cookie()
    
        return render_to_response('foo/login_form.html')

    세션 테이블 정리
    django는 기한이 지난 세션 데이터를 자동으로 삭제하지 않습니다.django-admin을 실행하십시오.py cleanup 데이터베이스에서 세션 테이블에서 만료된session 삭제
    구성 요약
    일부 django 설정은session의 행동을 제어할 수 있습니다
    SESSION_ENGINE
    Default: django.contrib.sessions.backends.db
    선택 사항:
  • 'django.contrib.sessions.backends.db'
  • 'django.contrib.sessions.backends.file'
  • 'django.contrib.sessions.backends.cache'
  • 'django.contrib.sessions.backends.cached_db'
  • 'django.contrib.sessions.backends.signed_cookies'

  • SESSION_FILE_PATH
    Default: /tmp/
    SESSION_COOKIE_AGE
    Default: 1209600(2주, 초)
    SESSION_COOKIE_DOMAIN
    Default: None
    예를 들어 ".lawrence.com"과 같습니다.
    SESSION_COOKIE_HTTPONLY
    Default: True
    SESSION_COOKIE_NAME
    Default: 'sessionid'
    SESSION_COOKIE_PATH
    Default: '/'
    SESSION_COOKIE_SECURE
    Default: False
    만약 사실이라면 쿠키는 https에서만 전송됩니다
    SESSION_EXPIRE_AT_BROWSER_CLOSE
    Default: False
    SESSION_SAVE_EVERY_REQUEST
    Default: False
    요청할 때마다session 데이터를 저장할지 여부
    p

    좋은 웹페이지 즐겨찾기