쿠키 및 세션 작동 장고

우리는 HTTP 프로토콜가 상태임을 모두 알고.

비 저장 수단은 각 요청에 대해 독립적이다. 이전의 실행 요청 및 후속 요청의 결과를 바로 직접 후자 요청의 응답에 영향을주지 않으며, 이는 직접적으로 영향을 미치는 상기 응답 요청에 의해 한정되지 않으며, 관련되지 않는다.

삶을 설명하는 재미있는 단어는 파업으로, 서버에 대한 각 요청은 새입니다.

상태 데이터는 주어진 세션에서 만든 클라이언트와 서버로 이해 될 수 있으며, 어떤 국가는 이러한 데이터가 유지되지 않을 것이라고 생각하지 않습니다 것을. 생성 된 세션 데이터는 우리가 즉, 저장 될 필요가있다 "잡아." 그래서 쿠키는 이러한 시나리오에서 태어났다.

그리고 문제가, 당신이 내 사이트를 방문, 당신이 도착하지 않는 것을 확인할 수 없습니다. 우리가 장고를 배우기 전에 많은 페이지를 작성하지만,하지만 사용자가 모든 페이지만큼 그가 줄에 URL을 알고있는 바와 같이, 상륙 볼 수 없습니다. 그러나 우리는 우리가 확인 할, 자신의 안전을위한 것입니다. 어떤 URL 액세스, 사용자의 신원을 확인해야합니다. 그러나 사용자가 로그 오프 할뿐만 아니라 착륙 사용자가 내 사이트에 액세스 다른 URL로 수있을 것입니다 방문 페이지를 반복 할 필요가 없습니다 보장하는 후. 그러나 HTTP 무 아, 어떻게이 일을 보장하기 위해? 이 시점에서 우리는 쿠키를 찾고 있습니다.

먼저 말하기, 쿠키는 브라우저 기술입니다. 쿠키는 특별히에 약간의 정보를 한 참조는 서버가 브라우저에 저장된 키의 번들을 보낸다, 그것은 클라이언트에 서버 작은 디저트, 서버 브라우저가 자동으로 다음을 수행한다 액세스하려면 다음과 같이 이해 될 수있다 서버에 대한 키 - 값 쌍은 유용한 정보를 추출합니다.

빈 쿠키와 액세스 서버에 브라우저, 다음 서버에서 콘텐츠를 생성, 브라우저는 로컬로 저장 해당 수신 : 쿠키 작동 원리이다. 때 브라우저 액세스, 서버가 있었다 ""이 쿠키의 내용으로 판단 할 수 있도록 브라우저가 자동으로 쿠키를 가져올 것이다.

HTTP 프로토콜 기능

  • 없음 상태, 아니 연결 (1.1 버전은 짧은 연결을 나타 HTTP)
  • 형식 : 요청 라인 - 요청 헤더 - 빈 줄 - 요청 자료

쿠키를 가져 오기 :

request.COOKIES.get('xx')

서명 쿠키 (사용되지 않음) 확보 :

request.get_signed_cookie('is_login',salt='xxxxxx')

설정 쿠키 :

HttpResponse('xx').set_cookie('键','值')

설정 서명 쿠키 (사용되지 않음)

ret.set_signed_cookie('is_login',True,'xxxxxx')

쿠키 시간 제한 및 만료 날짜를 설정 :

ret.set_cookie('is_login', True, max_age=5)    # 超时时间 秒数
ret.set_cookie('is_login', True, expires=datetime.datetime.now() + datetime.timedelta(days=7))    #过期日期

삭제 쿠키 :

ret.delete_cookie('xxoo')

세션 장점

  1. 송신 쿠키를 이용하여
  2. 일반 텍스트 비는-표시
  3. 모든 길이
  4. 장고는 매우 쉽게 사용 인터페이스 세션에 우리는 몇 가지 간단한 명령은 세션 설정, 인수를 달성 비워 할 수있다 필요합니다.

설정 세션

request.session['xx'] = 'oo'

설정 세션 명령은 세 단계를 의미한다 :

  1. 임의의 문자열을 생성
  2. 로 전송을 위해 쿠키
  3. 자신의 서버의 데이터베이스에 데이터를 대응하는 임의의 문자열을 저장하고, 장고 세션 테이블을

세션을 가져옵니다

request.session.get('xx') -- 'oo'

이것은 간단한 명령은, 사실, 세션에게 역 과정을 설정이며, 세 단계에 대한 인수 세션을 의미하는 것입니다 :

# 1 取出cookie中的session随机字符串{'sessionid':'asdfasfpoaijsdgihsdj'}
xx = request.COOKIES.get('sessionid')
# 2 到数据库中查询这个sessionid对应的那条记录
data = select session_data from django_session where session_key = xx;
# 3 拿出记录中的session_data数据部分进行解密,并取出数据
dic = sss(data) -- {'is_login':True}
dic.get('is_login') -- True

로그 아웃 세션

def logout(request):
    request.session.flush()  # 删除session
    return redirect('login')

session.flush() 세션 명령은 두 가지 주요 단계를 취소됩니다 :

  1. 키 - 값 쌍 쿠키 삭제하는 세션 ID
  2. 데이터베이스에이 기록을 삭제

쿠키:

  • 세션 유지, 사용자가 반복적으로 로그인 할 필요가 없습니다
  • 크기 제한이 있습니다
  • 제한의 숫자가있다
  • 4킬로바이트 쿠키의 총 최대 크기
  • 서버는 클라이언트 브라우저에 20 쿠키를 저장할
  • 브라우저가 여러 서버에 액세스 할 수 있기 때문에 브라우저는 300 쿠키를 저장할

세션:

  • 안전보다 표면에 쿠키
  • 세션없는 크기 제한
  • 다수의 프로그램을 저장하도록 구성 될 수있다 캐시로 구성 할 수 있습니다

추천

출처www.cnblogs.com/shuoliuchina/p/12521594.html