쿠키 및 세션 작동 장고
쿠키 아는 사람
쿠키의 기원
우리는 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')
세션 장점
- 송신 쿠키를 이용하여
- 일반 텍스트 비는-표시
- 모든 길이
- 장고는 매우 쉽게 사용 인터페이스 세션에 우리는 몇 가지 간단한 명령은 세션 설정, 인수를 달성 비워 할 수있다 필요합니다.
설정 세션
request.session['xx'] = 'oo'
설정 세션 명령은 세 단계를 의미한다 :
- 임의의 문자열을 생성
- 로 전송을 위해 쿠키
- 자신의 서버의 데이터베이스에 데이터를 대응하는 임의의 문자열을 저장하고, 장고 세션 테이블을
세션을 가져옵니다
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()
세션 명령은 두 가지 주요 단계를 취소됩니다 :
- 키 - 값 쌍 쿠키 삭제하는 세션 ID
- 데이터베이스에이 기록을 삭제
요약 및 쿠키 및 세션의 비교
쿠키:
- 세션 유지, 사용자가 반복적으로 로그인 할 필요가 없습니다
- 크기 제한이 있습니다
- 제한의 숫자가있다
- 4킬로바이트 쿠키의 총 최대 크기
- 서버는 클라이언트 브라우저에 20 쿠키를 저장할
- 브라우저가 여러 서버에 액세스 할 수 있기 때문에 브라우저는 300 쿠키를 저장할
세션:
- 안전보다 표면에 쿠키
- 세션없는 크기 제한
- 다수의 프로그램을 저장하도록 구성 될 수있다 캐시로 구성 할 수 있습니다