Q : 쿠키와 세션을 사용하는 이유?
A : HTTP 프로토콜의 특징인 비연결성과 무상태성을 보완하기 위해 사용됨
Q : 세션을 쓰면되는데 굳이 쿠키를 사용하는 이유?
A : 세션이 쿠키에 비해 보안도 높은 편이나 쿠키를 사용하는 이유는 세션은 서버에 저장되고, 서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 상당하다. 이러한 자원관리 차원에서 쿠키와 세션을 적절한 요소 및 기능에 병행 사용하여,서버 자원의 낭비를 방지하며 웹사이트의 속도를 높일 수 있다.
쿠키(Cookie)
- HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일
- HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있음
** 쿠키 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성
- 클라이언트에 총 300개의 쿠키를 저장할 수 있음
- 하나의 도메인 당 20개의 쿠키를 가질 수 있음
- 하나의 쿠키는 4KB(=4096byte)까지 저장 가능
**쿠키의 구성요소
-
name
쿠키의 이름
-
value
쿠키의 저장된 값
-
expires
쿠키가 언제 삭제되는지 결정
ex) expires="Wdy, DD-Mon-YYYY HH:MM:ss GMT"
- 쿠키에 만료일이 포함되어 있으면 영구적 쿠키로 간주
- Max-Age를 통해 지정된 만료일이 되면 디스크에서 쿠키가 제거됨
- domain
쿠키가 사용되는 도메인을 지정
ex) domain=nesoy.github.io
- 이 값이 현재 탐색 중인 도메인과 일치하지 않을 경우, "타사 쿠키"로
간주되며 브라우저에서 거부
- 이렇게 하여 한 도메인에서 다른 도메인에 대한 쿠키를 사용하지 못하게 설정
- path
쿠키를 반환할 경로를 결정
ex) path=/
- 도메인의 루트 경로로 이동할 경우 쿠키가 전송
-
secure
보안 연결 설정
-
HttpOnly
HTTP 외에 다른 통신 사용 가능 설정
**쿠키의 종류
-
Session Cookie
보통 만료 시간을 설정하고 메모리에만 저장되며 브라우저 종료 시 쿠키를 삭제
-
Persistent Cookie
장기간 유지되는 쿠키(예를 들어 Max-Age 1년), 파일로 저장되어 브라우저 종료와 관계없이 사용
-
Secure Cookie
HTTPS에서만 사용, 쿠키 정보가 암호화되어 전송
-
Third-Party Cookie
방문한 도메인과 다른 도메인의 쿠키. 보통 광고 배너 등을 관리할 대 유입 경로를 추적하기 위해 사용
** 쿠키의 동작 순서
- 클라이언트가 페이지를 요청한다. (사용자가 웹사이트에 접근)
- 웹 서버는 쿠키를 생성한다.
- 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에게 돌려준다.
- 넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
- 동일 사이트 재방문 시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송한다.
**쿠키 사용 예시
- 방문했던 사이트에 다시 방문했을 때 아이디와 비밀번호 자동 입력
- 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크
** 쿠키의 단점
- 쿠키에 대한 정보를 매 헤더(Http Header)에 추가하여 보냈기 때문에 상당한 트래픽을 발생시킴
- 결제 정보등을 쿠키에 저장했을 때 쿠키가 유출되면 보안에 대한 문제점도 발생
쿠키의 트래픽 문제와 쿠키를 변경하는 보안적 이슈를 해결하기 위해 세션 등장
세션(Session)
- 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술
- 여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말함
-> 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
**세션 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
- 웹 서버의 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.
- 저장 데이터에 제한이 없다.
- 각 클라이언트 고유 Session ID를 부여한다. Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공
**세션의 동작 순서
- 클라이언트가 페이지를 요청한다. (사용자가 웹사이트 접근)
- 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인한다.
- session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다.
- 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다.쿠키 이름 : JSESSIONID
- 클라이언트는 재접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id 값을 서버에 전달
**세션 사용 예시
- 화면이 이동해도 로그인이 풀리지 않고 로그아웃 하기 전까지 유지
쿠키와 세션의 차이