본문 바로가기

Etc

Etc - 쿠키(cookie)와 세션(session)

쿠키와 세션을 사용하는 이유는 무엇인가?

Http 통신의 특징

1] Connectionless(비연결지향): 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는다.

2] Stateless(상태정보 유지안함): 요청에 응답후 접속을 끊기 때문에 클라이언트의 상태 정보를 저장하지 않는다.

 

위의 내용은 Http 특징이지만, 실제로는 데이터 유지가 필요한 경우가 많다.(대표적인 예로 로그인유지 기능) 따라서 클라이언트와 서버 통신시 정보를 유지하기 위해 쿠키와 세션을 사용하는 것이다.

쿠키(cookie)란?

http를 통해 웹사이트에 방문할 때, 그 사이트가 사용하고 있는 서버에서 클라이언트에 저장하는 기록데이터 파일이다. 이 파일을 저장해두었다가 필요시 정보를 읽어서 사용한다. key-value 쌍의 데이터 파일로 구성되어있다.

 

특징

- 이름&값(key-value), 만료일, 경로정보(도메인, 경로)로 구성되어 있음

- 클라이언트에 총 300개의 쿠키 저장 가능

- 하나의 도메인당 20개의 쿠키를 가질 수 있다

- 하나의 쿠키는 4kb까지 저장 가능. Response Header에 [Set-Cookie] 속성을 사용하면 클라이언트에 쿠키 생성가능

- 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 요청시에 Request Header를 넣어서 자동으로 서버에 전송

 

사용 예

- 로그인 상태 유지

- 일주일간 다시보지 않기

- 최근 검색 상품을 광고에서 추천

- 장바구니 기능

세션(session)이란?

http를 통해 웹사이트에 방문할 때, 클라이언트의 요청을 유지하기 위해 웹서버에 정보를 저장하는 방법이다. 브라우저(서버와의 연결) 종료시 까지 유지된다. 클라이언트가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

 

특징

- 웹서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장

- 브라우저를 닫거나 서버에서 세션을 삭제했을 때 만료되므로, 쿠키보다 보안이 더 뛰어나다

- 저장데이터에 제한이 없다

- 각 클라이언트의 고유 세션ID를 부여한다.

- 세션ID를 가지고 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스를 제공할 수 있다.

 

사용 예

- 로그인 유지

- 클라이언트 권한 체크 (관리자/일반사용자)

 

세션 동작방식

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

2] 클라이언트는 세션ID에 대해 쿠키를 사용해서 저장하고 가짐

3] 클라이언트는 서버에 요청시, 쿠키의 세션ID를 같이 서버에 전달해서 요청

4] 서버는 세션ID를 전달 받아서 별다른 작업없이 세션ID로 세션에 있는 클라이언트 정보를 가져옴

5] 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에 응답

세션은 쿠키에 기반한다.

 

서버가 여러대인경우, 세션관리방법 알아보기

=> https://xggames.tistory.com/71

쿠키와 세션 한눈에 비교해보기

  쿠키(Cookie) 세션(Session)
저장위치 클라이언트(브라우저) 서버
저장형식 text Object
리소스 클라이언트 서버
(사용량이 많으면 성능저하 유발)
용량제한 도메인당 20개, 1쿠키당 4kb 제한 없음
보안 취약
(탈취, 변조 위험 존재)
안전
(서버에 저장이 되므로)
속도 빠름 느림
(세션 아이디를 가지고 서버에서 다시 데이터를 참조)
만료시점 쿠키에 설정된 만료정보 브라우저 종료시 삭제

참고자료

= https://interconnection.tistory.com/74

= https://cheershennah.tistory.com/135

= https://vnvn31.tistory.com/entry/%EC%BF%A0%ED%82%A4Cookie-vs-%EC%84%B8%EC%85%98Session