Cookie & Session

업데이트:

HTTP

HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위해 서버/클라이언트 모델을 따르는 통신규약이다.
비연결성(Connectionless)과 비상태성(Stateless) 특징을 가지고 있다.
이런 특징 때문에 서버의 자원을 절약하기 위해 모든 사용자의 요청마다 연결과 해제의 과정의 거치기 때문에 연결 상태가 유지되지 않고, 연결 해제 후에 상태 정보가 저장되지 않는다.
이로 인해 사용자를 식별할 수 없어 같은 사용자가 요청을 보내도 새로운 사용자로 인식하는 단점이 있다.
쿠키와 세션은 HTTP의 비연결성,비상태성을 보완하여 서버가 클라이언트를 식별하게 해주는 역할을 한다.


쿠키

쿠키는 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일이다.
서버가 사용자의 웹 브라우저에 저장하는, 클라이언트 로컬에 저장되는 Key-Value쌍의 String 형태로 이루어진 데이터 파일이다.
쿠키의 기한이 정해져 있지 않고, 명시적으로 지우지 않는다면 반 영구적으로 유지된다.


사용 목적

  1. 세션 관리 : 로그인, 사용자 닉네임, 접속 시간, 장바구니등의 서버가 알아야할 정보들을 저장
  2. 개인화 : 사용자마다 다르게 그 사람의 적절한 페이지를 보여준다
  3. 트래킹 : 사용자의 행동과 패턴을 분석하고 기록


동작 방식

  1. 클라이언트가 서버에 요청한다.
  2. 서버는 쿠키를 생성해 HTTP 헤더에 쿠키를 포함시켜 응답한다.
  3. 저장된 쿠키는 웹 브라우저의 쿠키저장소에 저장된다.
  4. 이후 같은 사이트의 서버를 방문할 때마다, 저장된 쿠키를 요청할 header에 담아 다시 서버로 전송한다.
  5. 서버는 전송받은 쿠키와 서버에 저장된 사용자 정보를 비교하여 같은 사용자임을 확인한다.


세션

세션 아이디는 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장되고, 브라우저 종료시 소멸된다.
세션은 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술이다.
로그아웃하면 새로운 사용자로 인식해 새로운 세션이 생성된다.

아이디, 닉네임 등의 정보를 세션에 담아두면 요청 때마다 DB에 접근할 필요가 없어서 효율적이다.
하지만 서버의 자원을 사용하기 때문에 무분별하게 생성하면 속도가 느려진다.

동작 방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급받는다.
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장한다.
  3. 클라이언트가 서버에 요청 시 세션 ID를 서버에 전달한다.
  4. 서버는 세션 ID를 전달 받아 다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져온다.
  5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답한다.


쿠키와 세션의 차이점

  1. 저장위치
    쿠키 : 클라이언트의 웹 브라우저가 지정하는 메모리 또는 하드디스크
    세션 : 서버의 메모리
  2. 저장형식
    쿠키 : text 형식
    세션 : Object 형식
  3. 리소스(사용되는 자원)
    쿠키 : 클라이언트에 저장되고 클라이언트의 메모리를 사용하기 때문에 서버의 자원을 사용하지 않음
    세션 : 세션은 서버에 저장되고 서버의 메모리로 로딩 되기 때문에 세션이 생길때마다 서버의 자원을 차지
  4. 용량제한
    쿠키 : 한 도메인당 20개/ 하나의 쿠키 당 4KB (클라이언트 모르게 접속되는 사이트에 의하여 설정될 경우를 방지하기 위함)
    세션 : 개수나 용량에 제한 없음
  5. 만료시점
    쿠키 : 저장할 때 expires 속성을 정의해 무효화 시키면 삭제될 날짜 지정 가능. 지정하지 않으면 브라우저 종료시 만료
    세션 : 클라이언트가 로그아웃하거나, 설정한 시간동안 반응이 없을 경우 무효화



참고



태그:

카테고리:

업데이트:

댓글남기기