Django에서 Cookie와 Session 상태 유지 시리즈 11

5546 단어

1, 정의


브라우저 요청 서버는 무상태입니다.무상태는 사용자가 요청할 때 브라우저, 서버가 이전에 이 사용자가 무엇을 했는지 알 수 없으며, 매번 요청은 새로운 요청이다.무상태의 응용 차원은 브라우저와 서버 간의 통신이 HTTP 프로토콜을 준수하기 때문이다.근본 원인은 브라우저와 서버는 Socket 플러그인을 사용하여 통신을 하고 서버가 요청 결과를 브라우저에 되돌려 주면 현재의 Socket 연결을 닫고 서버도 처리 페이지가 끝난 후에 페이지 대상을 삭제합니다.
때때로 사용자가 조회한 상태를 유지해야 한다. 예를 들어 사용자가 로그인했는지, 어떤 상품을 조회했는지 등이다.상태 유지에는 다음과 같은 두 가지 방법이 있습니다.
  • 클라이언트에서 정보를 저장할 때 쿠키를 사용..
  • 서버에 정보 저장하기 Session 사용..

  • 2,Cookie


    정의


    쿠키, 때로는 복수 형식의 쿠키를 사용하는데 일부 사이트가 사용자의 신분을 식별하고session 추적을 하기 위해 사용자의 로컬 단말기에 저장된 데이터(일반적으로 암호화됨)를 가리킨다.쿠키는 1993년 3월 망경회사의 전 직원인 Lou Montulli가 발명했다.
    쿠키는 서버에서 생성되어 User-Agent(일반적으로 브라우저)에 전송되며, 브라우저는 쿠키의 키/value를 특정한 디렉터리의 텍스트 파일에 저장하고, 다음에 같은 사이트를 요청할 때 이 쿠키를 서버에 발송합니다(브라우저가 쿠키를 사용하도록 설정한 전제).
    쿠키 이름과 값은 서버 측에서 스스로 정의할 수 있으며, 서버는 이 사용자가 합법적인 사용자인지, 다시 로그인해야 하는지 등을 알 수 있다.서버는 쿠키에 포함된 정보의 임의성을 이용하여 이러한 정보를 선별하고 자주 유지하여 HTTP 전송 중의 상태를 판단할 수 있다.
    Cookies의 가장 전형적인 응용 프로그램은 등록 사용자가 이미 사이트에 로그인했는지 판정하는 것이다. 사용자는 다음에 이 사이트에 들어갈 때 사용자 정보를 보존하여 로그인 수속을 간소화하는지 힌트를 얻을 수 있다. 이것은 모두 Cookies의 기능이다.또 다른 중요한 응용 장소는 쇼핑 카트와 같은 처리이다.사용자는 일정 기간 동안 같은 사이트의 다른 페이지에서 서로 다른 상품을 선택할 수 있으며, 이 정보는 마지막 지불 시 정보를 추출하기 위해 쿠키에 쓰일 수 있다.
    쿠키는 브라우저에 저장된 순수한 텍스트 정보로 암호와 같은 민감한 정보를 저장하지 않는 것을 권장합니다. 컴퓨터의 브라우저는 다른 사람이 사용할 수 있기 때문입니다.

    쿠키의 특징

  • 쿠키는 키 값이 맞는 형식으로 정보를 저장합니다..
  • 쿠키는 도메인 이름의 안전을 바탕으로 서로 다른 도메인 이름의 쿠키는 서로 방문할 수 없다. 예를 들어baidu를 방문할 수 없다.com에서 브라우저에 쿠키 정보를 썼습니다. 같은 브라우저를 사용하여baidu에 접근합니다.com 시 baidu에 접근할 수 없습니다.com에서 쓴 쿠키 메시지..
  • 브라우저가 웹 사이트를 요청할 때 본 웹 사이트 아래의 모든 쿠키 정보를 서버에 제출합니다..

  • 전형적인 응용: 사용자 이름을 기억하고 사이트의 광고 전송을 한다.


    설명: 광고 푸시 상품은 당신이 타오바오에서 클릭한 상품 종류 등 조건을 바탕으로 선별한 것입니다. 보아하니 이것은 징동에서 타오바오를 방문한 쿠키인 것 같지만 사실은 그렇지 않습니다. 보통 iframe 라벨로 타오바오의 광고 페이지를 징동닷컴 페이지에 끼워 넣기 때문에 타오바오의 쿠키는 징동닷컴에서 읽지 않고 여전히 타오바오닷컴에 맡깁니다.개발자 도구를 통해 요소를 볼 수 있습니다.

    3,Session


    활용단어참조


    민감하고 중요한 정보는 사용자 이름, 잔액, 등급, 인증 코드 등 브라우저에 저장할 수 없으며 서버에 저장하는 것을 권장합니다.서버 쪽에서 상태를 유지하는 방안이 바로 Session입니다.

    Session 활성화 및 비활성화

  • Django 프로젝트는 기본적으로 Session을 사용합니다..
  • Session 비활성화: Session 중간부품을 삭제합니다..
  • MIDDLEWARE_CLASSES = (
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'django.middleware.security.SecurityMiddleware',
    )
    

    저장 방식


    항목의 설정을 엽니다.py 파일, SESSION_ 설정ENGINE 항목은 데이터베이스, 캐시, Redis 등에 저장할 수 있는 Session 데이터 저장 방식을 지정합니다.
  • 1.데이터베이스에 저장됩니다. 아래의 설정은 쓸 수도 있고 안 쓸 수도 있습니다. 이것은 기본 저장 방식입니다.데이터베이스 스토리지를 사용하려면 프로젝트 INSTALLED_APPS에 Session 응용 프로그램을 설치합니다.그리고 이전을 실행해야만 데이터베이스에서session표를 생성할 수 있습니다

  • SESSION_ENGINE='django.contrib.sessions.backends.db'
  • 2.캐시에 저장: 본체 메모리에 저장되며, 잃어버리면 찾을 수 없으며, 데이터베이스 방식보다 읽기와 쓰기가 빠릅니다

  • SESSION_ENGINE='django.contrib.sessions.backends.cache'
  • 3.혼합 스토리지: 기본 메모리에서 우선 액세스하고 없으면 데이터베이스에서 액세스합니다

  • SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

    쿠키에 의존


    모든 요청자의 Session은 서버에 저장됩니다. 서버는 요청자와 Session 데이터의 대응 관계를 어떻게 구분합니까?답: Session을 사용하면 쿠키에 sessionid 데이터를 저장합니다. 요청할 때마다 브라우저는 이 데이터를 서버에 보냅니다. 서버는 sessionid를 받은 후에 이 값에 따라 이 요청자의 Session을 찾습니다.
    결과: Session을 사용하려면 브라우저가 쿠키를 지원해야 합니다. 그렇지 않으면 Session을 사용할 수 없습니다.
    Session을 저장할 때 키는 쿠키의sessionid와 같고 값은 개발자가 설정한 키 값이 정보에 대해base64 인코딩을 하고 만료 시간은 개발자가 설정합니다.

    session 대상 및 방법 조작


    세션 읽기와 쓰기는 HttpRequest 객체의 Session 속성을 통해 수행됩니다.
  • 1 키 값 쌍으로 세션 쓰기..

  • request.session['키']=값
  • 2.키에 따라 값을 읽습니다.

  • request.session.get('키', 기본값)
  • 3.모든 세션을 지우고 저장소에서 값 부분을 삭제하고 키를 유지합니다.

  • request.session.clear()
  • 4.세션 데이터를 지우고 저장소에서 세션의 전체 데이터를 삭제합니다..

  • request.session.flush()
  • 5.세션에서 지정된 키 및 값을 삭제하고 저장소에서 해당 키 및 값만 삭제합니다

  • del request.session['키']
  • 세션의 시간 초과 시간을 설정하고 기한이 지정되지 않으면 2주 후에 기한이 만료됩니다
  • 만약value가 정수라면, 세션은value초가 활성화되지 않은 후에 만료됩니다
  • 만약value가 0이면 사용자 세션의 쿠키는 사용자의 브라우저가 닫힐 때 만료됩니다
  • value가 None이면 세션이 만료되지 않습니다..

  • request.session.set_expiry(value)

    Redis 스토리지 세션 사용


    세션은 파일, 순수 쿠키,Memcached,Redis 등 방식으로 저장할 수 있으며, 다음은redis 저장소를 사용합니다.
  • 1, 설치 패키지..

  • pip install django-redis-sessions
  • 2, 프로젝트 settings 파일을 수정하고 다음과 같은 항목을 추가합니다
  • # session redis 
    SESSION_ENGINE = 'redis_sessions.session' # session redis 
    SESSION_REDIS_HOST = 'localhost' #redis 
    SESSION_REDIS_PORT = 6379 #redis 
    SESSION_REDIS_DB = 1 # 
    SESSION_REDIS_PASSWORD = '' # 
    SESSION_REDIS_PREFIX = 'session'
    
  • 3, 응용 프로그램을 열면views.py 파일, session_ 수정테스트 보기는 다음과 같습니다
  • def session_test(request):
        request.session['name']='xiaoke'
        # name=request.session.get('name')
        # del request.session['name']
        # request.session.flush()
        return HttpResponse(' ')
    
  • 4.redis의 명령을 관리하려면 redis 서비스가 켜져 있는지 확인해야 합니다.
  •  :ps ajx|grep redis
     :sudo service redis start
     :sudo service redis stop
     :redis-cli
     :select 1
     :keys *
     :get  
    

    좋은 웹페이지 즐겨찾기