JAVA/JSP

[JSP] 쿠키와 세션에 대해

JongHyun99 2021. 3. 24. 14:14
728x90

developer.mozilla.org/ko/docs/Web/HTTP

 

HTTP | MDN

HTTP 하이퍼텍스트 전송 프로토콜(HTTP)은 HTML과 같은 하이퍼미디어 문서를 전송하기위한 애플리케이션 레이어 프로토콜입니다. 웹 브라우저와 웹 서버간의 커뮤니케이션을위해 디자인되었지만

developer.mozilla.org

HTTP 프로토콜 특징

 

1. 비연결지향 (Connectionless)

Request와 Response로 데이터 교환을 하지만 연결을 유지하지는 않는 특성이 있다.

 

2. 무상태지향 (Stateless)

서버가 어떠한 데이터(상태)도 유지하지 않는다.

 

이러한 특성덕에 자원의 낭비를 줄일 수 있지만 사용자를 알아볼 수 없기에 매번 서비스를 이용할 때마다 인증을 해야한다는 단점이 생긴다.

 

HTTP에서는 쿠키세션을 이용하여 이 두가지 특성을 보완한다.

 

 

쿠키 (Cookie)

쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.

쿠키의 특징

(1) 쿠키에는 이름, 값, 만료 날짜, 경로 정보가 들어있으며, 유효시간이 부여되면 브라우저가 종료되어도 인증정보가 유효하다.

(2) 클라이언트에 300개까지 쿠키 저장이 가능하며, 하나의 도메인 당 20개의 값만 가질 수 있다. 또한 하나의 쿠키 값은 4KB까지 저장이 가능하다.

(3) 쿠키는 사용자가 요청하지 않아도 브라우저가 Request 시에 Request Header를 넣어서 자동으로 전송한다.
(비효율적으로 모든 쿠키를 전송하지는 않고 지정한 도메인으로 요청할 때만 쿠키 값이 제공되도록 할 수 있음)

쿠키의 동작 방식

(1) 클라이언트가 페이지를 요청

(2) 서버에서 쿠키를 생성, 헤더에 포함시켜 응답 (클라이언트에서 보관하게됨)

(3) 클라이언트가 서버에 재접속하여 다시 요청할 때 갖고있던 쿠키 정보도 같이 HTTP 헤더에 함께 보냄

* 이전 상태 정보에 변화가 있을 시 쿠키를 업데이트하여 HTTP 헤더에 보관

쿠키의 사용

자동 로그인, '오늘은 더 이상 보지 않음' 팝업, 쇼핑몰 장바구니

쿠키의 보안성
웹 클라이언트 지역 저장소에만 저장되기 때문에 변질되거나 request에서 해킹당할 우려가 있어서 보안에 취약함

쿠키의 저장성
만료시간(expired time)이 있지만 파일로 저장되기 때문에 웹브라우저 종료해도 계속 남아있을 수 있음

쿠키의 처리속도
지역에만 정보가 있기 때문에 상대적으로 속도가 빠름



세션 (Session)

세션은 일정 시간 동안 같은 브라우저(클라이언트)로부터의 요청으로 상태 변수를 작성하여 상태를 유지하는 것

세션의 특징

(1) 쿠키를 기반으로 두고 있지만, 쿠키와 달리 사용자 정보 저장을 서버 측에서 관리한다.

(2) 서버에서 클라이언트를 구분하기 위해서 SESSIONID를 부여한다.

ㄴ 웹 브라우저에 접속하고, 종료 시까지 인증 상태를 유지할 수 있다.

(3) 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이 ID를 SessionID라고 부른다.

세션의 동작 방식

(1) 클라이언트가 서버에 접속 시 세션 ID 발급

(2) 서버에서는 클라이언트로 발급해준 아이디를 쿠키를 사용해 저장

ㄴ 이때 쿠키의 이름은 JSession

(3) 클라이언트는 재접속 시 이 쿠키(JSession)를 이용해서 세션 ID 값을 서버에 저장

세션의 보안성
클라이언트에는 session id만 저장하고 쿠키는 서버에서 저장되어 처리되기 때문에 보안성이 좋은 편

세션의 저장성
만료시간이 있으나 웹브라우저가 종료되면 만료시간에 상관없이 삭제됨

세션의 속도
정보가 서버에 있기 때문에 상대적으로 느림