Server 03 - 쿠키와 세션
in Web-Programming on Server
쿠키와 세션의 존재 이유
HTTP 프로토콜의 가장 큰 특징은 비연결성과 무상태이다. 요청하는 순간 연결했다가 응답 완료되면 연결을 끊는 것이고, 웹 서버와 클라이언트 상태 정보를 유지하지 않는 것이 가장 큰 특징이다.
그런데 HTTP 프로토콜 상에서 뭔가 특별한 기능을 수행하려 할 땐 위 두가지 특성은 방해가 된다. 예를 들어 로그인하여 나의 메일을 보는 과정에서 나의 정보가 비연결성과 무상태 특징에 의하여 알 수가 없을 텐데, 어떻게 나의 정보가 유지되어 내 메일을 볼 수 있을까?
이 것의 대한 해답은 이데 설명할 2가지 개념으로 답할 수 있다. 바로 쿠키와 세션이다.
쿠키
과자와 같은 이름을 지닌 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어 있는 작은 데이터 파일이다. 특정 웹 페이지를 방문하였을 때 클라이언트에 자그맣게 저장하였다가, 다시 재방문을 하였을 때 저장된 쿠키를 재사용하게 된다.
구성은 이름, 값, 만료일(저장 기간), 경로로 되어 있고 동작 순서는 다음과 같다.
- 클라이언트가 페이지를 요청 (사용자가 웹사이트에 접근)
- 웹 서버에서 쿠키를 생성
- 생성한 쿠키를 HTTP 헤더에 포함 시켜 클라이언트에게 응답
- 클라이언트가 쿠키를 가지고 있다가 다시 서버에 요청할 때 쿠키를 함께 전송
- 동일한 웹사이트 재방문 시 클라이언트 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송
쿠키의 예시로는 다시 재방문시 입력했던 아이디와 비밀번호가 자동으로 입력되는 경우, 팝업 창을 통해 이 창 다시보지 않기 옵션을 체크하는 경우이다.
세션
세션은 사용자가 웹 사이트를 방문하는 동안 일정 시간 동안 서버에 사용자 정보를 유지하는 방법 및 기술이다. 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시킨다.
여기서 일정 시간이란, 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다. 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
세션의 특징으론, 웹 서버에 상태를 유지하기 위한 세션 정보를 저장하고, 이 때 웹 서버의 저장되는 쿠키를 이용한다. 그리고 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되고서버 용량이 허용하는 한, 데이터 크기에 제한은 없다. 마지막으로 각 클라이언트 고유 Session ID를 부여하며 Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공할 수 있다.
세션의 동작방식은 다음과 같다.
- 클라이언트가 페이지를 요청 (사용자가 웹사이트에 접근)
- 서버는 클라이언트의 Request-Header Cookie를 확인하여, 클라이언트 Session ID 를 확인
- Session ID 존재하지 않을 겨우, Session ID를 생성하여 클라이언트에게 응답
- Session ID를 쿠키를 사용해 서버에 저장
- 클라이언트 재접속 시, 쿠키를 이용하여 Session ID 값을 서버에 전달
세션의 예시로는 로그인 이후 로그아웃 되기 전까지 로그인 된 채로 상태가 유지되는 것이다.
쿠키와 세션의 차이점
쿠키와 세션은 http의 비연결성과 무상태 특징에서 다룰 수 없는 상태 유지 기술이다. 그렇다면 위 두가지 기술의 차이점은 무엇일까?
- 저장위치
- 쿠키: 클라이언트
- 세션: 웹 서버
- 만료시점
- 쿠키: 브라우저 내 저장시 지정됨, 브라우저가 종료되도 유지 가능
- 세션: 브라우저 종료시 삭제
- 속도:
- 쿠키 > 세션
- 세션은 서버에 저장되기 때문에 서버 처리 시간이 붙어서 쿠키보단 느린 처리 속도를 가지게 된다.
- 보안:
- 쿠키 < 세션
- 쿠키는 클라이언트에 저장되기 때문에 타인에 의해 접근이 용이하기 때문에 세션보다 보안적이지는 않다.
