본문 바로가기
웹(web)/백엔드-python

CookieServer

by 바코94 2020. 7. 2.

쿠키란 HTTP 프로토콜 동작 방식이 connectionless여서 보완하기 위한 장치이다. HTTP 프로토콜은 단지 클라이언트가 request를 날리면 그에 대한 응답을 서버가 해주는 것이 끝이다. 연결되어서 유지되는 방식이 아니다. 요청과 응답이 이루어지면 끝이다.

 이것의 단점은 클라이언트의 사용에 대한 트래킹이 어렵다는 것이다. 왜냐면 서버에서는 클라이언트가 보내는 요청만 처리해주면 할 일이 끝나기 때문이다. 하지만 우리가 웹사이트를 이용하다보면 이용하는 정보를 알아두는 것이 유용한 경우가 많다. 쇼핑몰 웹사이트를 이용하는데 한 웹사이트에 오래 머무르면서 장바구니도 이용하고 여러가지 상품을 구경할 수 있다. 그러면 장바구니에 담았던 상품이 유지가 되고 최근 본 상품이 뜨기도 한다. 이는 쿠키라는 방식을 통해서 클라이언트 브라우저에 쿠키를 할당하는 방식으로 필요한 고객 정보들을 관리한다. 

 

response로 줄때 쿠키도 함께 주는 방법을 살펴보자.

1. 쿠키를 만든다.

c = cookies.SimpleCookie()
c['yourname'] = yourname
c['yourname']['domain'] = 'localhost'
c['yourname']['max-age'] = 60

 

위 코드를 실행하면 c는 아래와 같은 정보를 가진 쿠키가 생성된다.

Set-Cookie: yourname=hojeong; Domain=localhost; Max-Age=60

 

2. 쿠키를 헤더에 설정한다.

self.send_header('Set-Cookie', c['yourname'].OutputString())

 

 

request의 쿠키를 활용하는 방법을 살펴보자.

1. 쿠키가 request 헤더에 있는지 확인

if 'cookie' in self.headers:

 

2. 쿠키의 정보 가져오기

c = cookies.SimpleCookie(self.headers['cookie'])

name = c['yourname'].value

 

3. 쿠키는 있는데 'yourname'에 해당하는 쿠키가 없을 경우 예외처리

if 'cookie' in self.headers:

  try:

    2번 코드 + 쿠키 있을 때 사용할 코드

  except (KeyError, cookies.CookieError) as e:

    쿠키 없을 때 사용할 코드

 

 

정리하면 response로 헤더에 set-cookie를 넘겨주어 클라이언트쪽에서 쿠키를 가지도록 한다.

이후 클라이언트에서 넘어오는 요청의 쿠키를 통해 활용할 수 있다.

 

 

 MDN에서는 매 request마다 쿠키가 전송되는 것이 성능 저하를 유발할 수 있어 웹스토리지 API나 IndexedDB를 사용하는 것을 권장한다. 링크(https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies)

'웹(web) > 백엔드-python' 카테고리의 다른 글

JSON  (0) 2020.07.02
do_GET+ do_POST 예제2  (0) 2020.07.01
do_GET+ do_POST 예제1  (0) 2020.07.01
parse_qs(POST data parsing)  (0) 2020.07.01
EchoServer  (0) 2020.07.01