9. Django 학습노트-Cookies 및 Session
2572 단어 장고의 학습 노트
기사 목록
Cookies
이론적으로 한 사용자의 모든 요청 조작은 같은 세션에 속해야 하고 다른 사용자의 모든 요청 조작은 다른 세션에 속해야 하며 양자는 혼동해서는 안 된다.웹 응용 프로그램은 HTTP 프로토콜을 사용하여 데이터를 전송하고 HTTP 프로토콜은 무상태 프로토콜입니다.데이터 교환이 완료되면 클라이언트와 서버 측의 연결이 닫히고 다시 데이터를 교환하려면 새로운 연결이 필요합니다.이것은 서버가 연결에서 세션을 추적할 수 없다는 것을 의미한다.이 세션을 추적하려면 메커니즘을 도입해야 한다.쿠키는 바로 이런 메커니즘이다.이것은 HTTP 프로토콜의 상태가 없는 부족함을 보완할 수 있다.Session이 등장하기 전에 기본적으로 모든 사이트는 쿠키를 이용하여 세션을 추적한다.쿠키는 실제로 텍스트 메시지의 일부분이다.클라이언트가 서버를 요청합니다. 만약 서버가 이 사용자의 상태를 기록해야 한다면response를 사용하여 클라이언트 브라우저에 쿠키를 발급합니다.클라이언트 브라우저는 쿠키를 저장합니다.브라우저가 이 사이트를 다시 요청할 때, 브라우저는 요청한 사이트 주소를 이 쿠키와 함께 서버에 제출합니다.서버에서 사용자 상태를 식별하기 위해 쿠키를 확인합니다.서버는 필요에 따라 쿠키 내용을 수정할 수도 있습니다. HTTP는 무상태 프로토콜이기 때문에 서버는 네트워크 연결에서 고객의 신분을 알 수 없다.어떡하지?클라이언트들에게 통행증을 발급해 주십시오. 한 사람당 한 사람씩 방문하든지 간에 반드시 자신의 통행증을 휴대해야 합니다.이렇게 하면 서버가 통행증에서 고객의 신분을 확인할 수 있다.이것이 바로 쿠키의 작업 원리다. 쿠키는 서버에서 생성됩니다. Response를 통해 쿠키를 브라우저에 기록합니다. 다음 방문은 브라우저가 서로 다른 규칙에 따라 쿠키를 가져옵니다.주의: 쿠키는 브라우저를 뛰어넘을 수 없습니다.
쿠키 설정(response 설정 사용): response.set_cookie(key,value[,max_age=None,expires=None])
max_age: , cookie
None:
expires: , datetime timedelta,
expires=datetime.datetime(2019, 1, 1, 2, 3, 4)
datetime.datetime.now() + datetime.timedelta(days=10)
:max_age expries
# response.set_cookie('username', username, max_age=10)
# response.set_cookie("username", username1, expires=d)
쿠키 가져오기 (request 가져오기 사용):request.COOKIES.get('username')
쿠키 삭제(response를 사용하여 삭제):response.delete_cookie('username')
쿠키는 클라이언트에 저장되는 장점: 데이터는 클라이언트에 존재하고 서버 측의 압력을 덜어주며 사이트의 성능을 향상시킨다.단점: 보안이 높지 않음: 클라이언트에서 사용자 세션 정보를 쉽게 보거나 풀 수 있음
Session
서버 사이드 세션 기술, 쿠키에 의존.django에서 세션 설정 사용 INSTALLED_APPS:
'django.contrib.sessions'
MIDDLEWARE:
'django.contrib.sessions.middleware.SessionMiddleware'
기본 작업 1) Sessions 값 설정(request 설정 사용) request.session['username'] = username
2) Sessions 값 가져오기 get(key,default=None)
username = request.session.get("username")
# session_name = request.session["session_name"]
3) Sessions 값 삭제 del request.session["session_name"]
clear()
flush() cookie
session.session_key session key
데이터는 데이터베이스에 저장되어 인코딩됩니다. 사용하는 것은 Base64입니다. 모든 HttpRequest 대상은session 속성이 있고 클래스 사전 대상입니다.
response.set_cookie(key,value[,max_age=None,expires=None])
max_age: , cookie
None:
expires: , datetime timedelta,
expires=datetime.datetime(2019, 1, 1, 2, 3, 4)
datetime.datetime.now() + datetime.timedelta(days=10)
:max_age expries
# response.set_cookie('username', username, max_age=10)
# response.set_cookie("username", username1, expires=d)
request.COOKIES.get('username')
response.delete_cookie('username')
서버 사이드 세션 기술, 쿠키에 의존.django에서 세션 설정 사용
INSTALLED_APPS:
'django.contrib.sessions'
MIDDLEWARE:
'django.contrib.sessions.middleware.SessionMiddleware'
기본 작업 1) Sessions 값 설정(request 설정 사용)
request.session['username'] = username
2) Sessions 값 가져오기
get(key,default=None)
username = request.session.get("username")
# session_name = request.session["session_name"]
3) Sessions 값 삭제
del request.session["session_name"]
clear()
flush() cookie
session.session_key session key
데이터는 데이터베이스에 저장되어 인코딩됩니다. 사용하는 것은 Base64입니다. 모든 HttpRequest 대상은session 속성이 있고 클래스 사전 대상입니다.