WEB/Django concept

[Django][Authentication System1] Cookie & Session

bay07 2024. 4. 20. 12:07

▶ 문제 

우리가 서버로부터 받은 페이지를 둘러볼 때 

우리는 서버와 서로 연결되어 있는 상태가 아니다 

HTTP의 특징은 비 연결을 지향한다는 것과, 무상태라는 것이다. 

 

* HTTP 

HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 규약

웹(WWW)에서 이루어지는 

모든 데이터 교환의 기초이다 

비 연결 지향 (connectionless) 무상태(stateless)
서버는 요청에 대한 응답을 보낸 후 
연결을 끊는다 
연결을 끊는 순간
클라이언트와 서버 간의 통신이 끝난다
상태 정보가 유지되지 않음

ex) 장바구니에 담은 상품을 유지할 수 없음
로그인 상태를 유지할 수 없음

=> 상태를 유지하기 위한 기술이 필요하다 

▶ 쿠키 (Cookie)

서버가 사용자의 웹 브라우저에 전송하는
작은 데이터 조각

클라이언트 측에서 저장되는 작은 데이터 파일이며
사용자의 인증, 추적, 상태 유지 등에 사용되는
데이터 저장 방식이다. 

- 쿠키 사용 원리 
1. 브라우저 (클라이언트)는 쿠키를 KEY-VALUE의 데이터 형식으로 저장한다
2. 이렇게 쿠키를 저장해 놓았다가, 
동일한 서버에서 재요청을 할 때, 
저장된 쿠키를 함께 전송한다 

쿠키는 2개의 요청이 
동일한 브라우저에서 왔는지 아닌지를 판단할 때 주로 사용한다 

이를 이용해, 사용자의 로그인 상태를 유지할 수 있다. 
상태가 없는 (stateless) HTTP 프로토콜에서
상태 정보를 기억 시켜주기 때문이다. 


▶ 쿠키를 이용한 장바구니 

장바구니에 상품 담기 
개발자 도구 - Network탭 - cartView.pang 확인
서버는 Set-cookie 응답 헤더를 응답과 함께 브라우저에게 전송한다 
이 헤더가 클라이언트에게 "쿠키를 저장하라"고 전달한다 
Cookie 데이터 자세히 확인하기 
메인페이지로 이동했을 때, 
장바구니가 유지되는 것 확인해보기 
개발자 도구 - Application 탭 - Cookies
마우스 우측 버튼 - Clear - 새로고침
=> 장바구니가 비어있는 것 확인하기 

▶ 쿠키를 사용하는 목적

1. 세션 관리 (Session management)

로그인, 아이디 자동완성, 공지 하루 안 보기 

팝업 체크, 장바구니 등의 정보 관리 등

 

2. 개인화 (Personalization)

사용자 선호, 테마 등의 설정

 

3. 트래킹 (Tracking)

사용자의 행동을 기록하고, 분석한다 


▶ 세션 (Session)

서버 측에서 생성되어, 클라이언트와 서버 간의 상태를 유지한다 

상태 정보를 저장하는 데이터 저장 방식이다 

=> 쿠키에 세션 데이터를 저장하여 

매 요청시마다 세션 데이터를 함께 보낸다 

 

▶ 세션 작동 원리 

1. 클라이언트가 로그인을 하면, 서버가 session 데이터를 생성한 후 저장한다
2. 생성된 session 데이터에 인증할 수 있는 session id를 발급한다 
3. 발급한 session id를 클라이언트에게 응답한다
4. 클라이언트는 응답 받는 session id를 쿠키에 저장한다

5. 클라이언트가 다시 동일한 서버에 접속하면, 요청과 함께 쿠키를 서버에 전달한다
(session id가 저장된 쿠키)
6. 쿠키는 요청 때마다 서버에 함께 전송되므로
서버에서 session id를 확인해 로그인 되어있다는 것을 알도록 한다 


서버 측에서는 세션 데이터를 생성한 후 저장하고 

이 데이터에 접근할 수 있는 세션 ID를 생성한다 

이 ID를 클라이언트 측으로 전달하고, 

클라이언트는 이 ID를 쿠키에 저장한다 

이후 클라이언트가 같은 서버에 재요청을 할 때마다 

저장해두었던 쿠키도 함께 전송된다 

 

예를 들어, 로그인 상태 유지를 위해 

매 요청마다

로그인 되어있다는 사실을 입증하는 데이터를 

계속해서 보내는 것 


▶ 쿠키와 세션의 목적

서버와 클라이언트 간의 상태를 유지하는 것

 

▶ 쿠키 종류별 LifeTime (수명)

Session cookie Persistent cookies
현재 세션이 종료되면 삭제된다 
브라우저 종료와 함께 세션이 삭제된다
Expires 속성에 지정된 날짜 또는
Max-Age 속성에 지정된 기간이 지나면 삭제된다 

 

▶ Session in Django 

장고는 'database-backed session' 저장 방식을 기본 값으로 사용한다 

session 정보는 DB의 django_session 테이블에 저장된다

장고는 요청 안에 특정 session id를 포함하는 쿠키를 사용해서 

각각의 브라우저와 사이트가 연결된 session 데이터를 알아낸다 

=> 장고는 우리가 session 매커니즘 (복잡한 동작원리)의 대부분을 생각하지 않아도 되게끔

많은 도움을 준다