본문 바로가기
IT ▶/Security

웹브라우저 쿠키란? - 쿠키 개념, 세션 개념 (Cookie & Session)

by 오프로 2020. 2. 8.

 

 

 

 

안녕하세요!

 

 

인터넷을 사용하다 보면 쿠키 관련된 정보를 묻거나 설정하는 등 쿠키 정보에 대해 많이 사용이 됩니다.

 

 

자주 접하게 되는 쿠키(Cookie)세션(Session)이 무엇인지 한번 정리해보았습니다.

 

 

 

 

- 쿠키(Cookie) 란?

 

 

 

 

1> 웹서버가 웹 브라우저에게 보내어 저장했다가 서버의 부가적인 요청이 있을 때 다시 서버로 보내주는 문자열 정보

 

 

2> 웹페이지 방문 시 방문 기록 등 브라우저에서의 정보들이 저장된 텍스트 파일

 

 

 

웹에서 요청마다 매번 연결과 해제가 되면서 요청마다 새로운 사용자로 인식되는 단점이 있지만

 

쿠키와 세션을 통해 브라우저를 종료했다가 다시 접속해도 그 로그인 상태를 유지할 수 있습니다.

 

 

 

, 쿠키는 서버를 대신해 웹 브라우저에 저장하고 요청을 할 때

 

그 정보를 서버에 보내 사용자를 식별할 수 있게 합니다.

 

 

 

쿠키는 세션 관리, 개인화, 트래킹에 사용되며, 세션은 쿠키를 이용합니다.

 

웹 브라우저가 서버에 요청을 하면 서버는 세션 아이디를 할당해서 응답할 때 함께 전달합니다.

 

 

 

쿠키는 서버가 사용자의 웹 브라우저에 저장하며

 

데이터 형태는 Key, Value 형태로 String 문이며, 4KB 이상 저장이 불가합니다.

 

브라우저마다 저장되는 쿠키는 다릅니다. (크롬, 익스플로러, 사파리, 파이어폭스 등등 각각 다름)

 

 

 

 

- 쿠키 종류 (Type)

 

 

1> 기술적 쿠키 : 검색하는 주체 사람인지 아니면 어플리케이션인지 이용자 구분 기능 수행

 

 

2> 분석 쿠키 : 어떤 종류 검색하는지, 많이 검색하는지, 시간, 언어 대상 등의 정보를 수집

 

 

3> 광고 쿠키 : 검색 내용, 국가 ,언어에 따라 광고 게재

 

 

 

 

- 쿠키 사용방법 (Method)

 

 

1> 클라이언트가 서버에 요청을 하면 서버는 응답할 때 쿠키에 저장하고자 하는 정보를

 

Header Set-Cookie로 전달합니다.

 

 

Set-Cookie = <cookie-name>=<cookie-value>

 

 

2> 클라이언트는 서버로 전송하는 요청에 현재 브라우저에 저장된 쿠키를 Header Cookie 로 전달

 

 

Cookie : <cookie-name>=<cookie-value> 

 

 

서버가 쿠키와 함께 클라이언트에게 응답을 전달하면,

 

 

HTTP/1.1 200 OK
Date: : Wed, 05 May 2020 10:34:09 GMT
Content-Type: : text/html; charset=UTF-8
Set-Cookie : test_cookie = testkey..... 

 

 

이후에는 해당 클라이언트는 매번 저장된 쿠키를 Header에 포함해서 요청을 보냅니다.

 

 

GET /testPage.html HTTP/1.1
Accept: */*
Cookie : test_cookie = testkey
……

 

 

 

일반적으로 Session 쿠키는 웹 브라우저가 종료될 때 제거되는 쿠키입니다.

 

브라우저가 종료되더라도 쿠키를 유지하고자 하면, Permanent를 사용합니다.

 

쿠키 생성 시 Expires or Max-Age 옵션을 추가합니다.

 

 

1> Max-Age : 현재 시간 기준으로 얼마동안 쿠키를 유지할지 지정

 

2> Expires : 쿠키가 만료될 날짜 지정

 

 

Set-Cookie : test_cookie=testkey; 
Expires = Tue, 05 May 2020 10:34:09 GMT;

 

 

 

 

- 쿠키 용도 (Purpose)

 

 

쿠키로 인하여 페이지 이동 시마다 로그인을 다시 하지 않고, 사용자 정보를 유지할 수 있습니다.

 

쿠키가 없다면 해당 사용자 정보 파라미터를 계속 페이지마다 넘겨줘야 합니다.

 

 

 

1> ID 정보 저장 ->로그인 상태 유지

 

2> 최근 검색한 정보 광고 추천

 

3> 쇼핑몰 장바구니 저장 기능

 

4> 3일간, 7일간 등 일정 기간 다시 보지 않기 체크 (쿠키 날짜 기록 계산)

 

 

 

 

- 쿠키 제어 옵션 (Option)

 

 

1> Secure : HTTPS 프로토콜 상 암호화된 요청일 경우 전송

 

2> HttpOnly : Cross-site 스크립트 공격을 방지. JavaScript 의 document.cookie API 접근 불가

 

3> Domain : 쿠키가 전송되게 될 호스트 명시

 

4> Path : 쿠키 Header 전송을 위해 요청되는 URL 경로

 

5> SameSite : 쿠키가 cross-site 요청과 함께 전송되지 않음을 요구 ->위조 공격에 대한 보호 방법

 

 

 

Set-Cookie : test_cookie=testkey; path = /; HttpOnly; Secure;

 

 

 

 

 

 

- 세션(Session) 이란?

 

 

 

 

인터넷을 사용하면서 google 페이지는 접속 시마다 로그인 상태를 유지하고 있습니다.

 

이는 쿠키를 통해서 사용자의 로그인 ID, 비밀번호를 쿠키에 저장하게 됩니다.

 

 

 

페이지 이동 시에 쿠키를 통해 로그인 정보를 서버에 전달하고,

 

서버에서는 해당 사용자를 식별하여 로그인 상태를 유지할 수 있습니다.

 

 

 

이 방식은 다만 쿠키가 노출되어 보안 문제를 방지하기 위해 세션 (Session)이 있습니다.

 

세션(Session)은 비밀번호 같이 인증 정보를 쿠키에 저장하지 않고,

 

사용자의 식별자인 JSESSIONID(session id) 로 저장합니다.

 

 

 

서버에서는 인증 정보와 같이 이 ID에 해당하는 로그인 상태, 시간, 닉네임, 만료기한 등 정보를 저장합니다.

 

서버는 해당 세션ID로 정보를 관리하기 때문에 훨씬 보안상 안전할 수 있습니다.

 

 

 

 

- 세션 동작 원리 (Principle)

 

 

 

1> 클라이언트 -> 서버 Request 요청 (Session ID 미존재)

 

 

2> 서버 -> 클라이언트로 Session ID 쿠키 값 체크 후 없을 경우 새로 생성해서 응답

 

 

3> 클라이언트는 전달받은 Session ID 값을 매 요청마다 Header 쿠키에 담아서 전달

 

 

4> 서버는 Session ID 로 사용자 식별

 

 

5> 클라이언트가 로그인 요청 시 서버에서는 session 을 로그인한 사용자 정보로 갱신하고, 새로운 Session ID를 발급하여 응답

 

 

6> 클라이언트가 이후에 사용자의 session ID 쿠키를 요청과 함께 전달하고, 서버에서도 해당 로그인 사용자로 식별

 

 

7> 클라이언트 종료 (브라우저 종료) 시 Session ID 제거, 서버에서도 Session 제거

 

 

 

 

- 세션 특징 (Feature)

 

 

 

1> Session ID는 브라우저 단위로 저장되고, 브라우저 종료 시 제거

 

 

2> 로그아웃 시 새로운 대상으로 인식하여 새로운 Session 생성

 

 

3> 로그인 여부, 닉네임 등 관련 정보를 Session에 같이 담으면 해당 정보를 DB에서 매번 조회할 필요가 없어 효율성 증가

 

 

 

- 보안 (Security)

 

 

 

HTTPS 통신을 위해 Session 옵션으로 secure = true 설정

 

Httponly = true 옵션으로 js 를 통해서 Session 쿠키를 사용할 수 없도록 강제 설정

 

 

 

 

이상으로 문의나 잘못된 내용 있으시면 댓글 부탁드립니다!

 

 

감사합니다.

 

 

 

 

 

728x90
300x250