본문 바로가기

IT 개념

세션과 쿠키의 차이점

이것도 면접 질문 중 하나였어서 찾아보았습니다.

https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582

[WEB] 쿠키, 세션이란?

웹의 기초중 하나인 쿠키와 세션에 대해 알아봅니다.

chrisjune-13837.medium.com

[HTTP 의 특징]

1. Connectionless(비연결지향)

1) 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성이 있다.

2. Stateless(상태정보유지안함)

2) HTTP 통신은 요청을 응답하도 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없다.

즉, 로그인을 하고 그 상태를 유지한 채로 웹 서비스를 제공하기 위해서는, 쿠키와 세션이라는 방법이 필요하다.

[쿠키]

클라이언트 로컬에 저장되는 Key-Value 쌍의 작은 데이터파일

1. 구성요소

1) 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly 여부

2. 동작방식

1) 클라이언트가 서버에 로그인 요청을 한다.

2) 서버는 클라이언트의 로그인 요청의 유효성을 확인(ID, PW 검사)하고

응답헤더에 set-cookie: user=입력ID 를 추가하여 응답한다.

3) 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키(cookie : user=입력ID)를 자동으로 요청헤더에 추가하여

요청한다. 헤더에 쿠키 값을 자동으로 추가하는 것은 브라우저에서 처리해준다.

쿠키의 기한이 정해져 있지 않고 명시적으로 지우지 않는다면 반 영구적으로 쿠키가 남아있게 된다.

3. 쿠키 값 확인방법

1) 브라우저 개발자 도구의 네트워크 ( 가독성이 떨어지고, 수정이 불가)

2) 브라우저의 쿠키관리 탭 (Application) 또는 쿠키관리 플러그인 (EditCookie plugin)을 설치하면

쿠키를 쉽게 수정할 수 있다.

※ 쿠키는 클라이언트에서 수정할 수 있기 때문에 위변조의 위험이 항상 존재한다. 따라서 쿠키값(value)를 암호화해야 더욱 안전하다.

[세션]

브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술

동작방식

1. 동작방식

1) 클라이언트가 서버에 로그인 요청을 한다.

2) 서버는 클라이언트의 로그인 요청의 유효성을 확인하고 (ID, PW 검사) unique 한 id를 sessionid 라는

이름으로 저장한다.

3) 서버가 응답할 때 응답헤더에 set-cookie : sessionid:a1x2fjz 를 추가하여 응답한다.

4) 클라이언트는 이후 서버에 요청할 때 전달받은 sessionid:a1x2fjz 쿠키를

자동으로 요청헤더에 추가하여 요청한다.

5) 서버에서는 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인 후

요청을 처리하고 응답한다.

※ 세션의 내용은 서버에 저장되기 때문에 계속하여 늘어날 경우 서버에 부하가 발생한다.

[쿠키와 세션의 차이점]

1. 저장위치

1) 쿠키 : 로컬

2) 세션 : 로컬과 서버에 저장

2. 보안

1) 쿠키 : 탈취와 변조가 가능

2) 세션 : ID 값만 가지고 있고 서버에 저장되어 있기 때문에 상대적으로 안전

3. LifeCycle

1) 쿠키 : 브라우저를 종료해도 파일로 남아있음

2) 세션 : 브라우저 종료 시 세션을 삭제

4. 속도

1) 쿠키 : 파일에서 읽기 때문에 상대적으로 빠름

2) 세션 : 요청마다 서버에서 처리를 해야하기 때문에 비교적 느림

음..

즉 ,

세션은 고유 ID 값을 가지고 서버에 저장되어, 클라이언트가 서버로 어떠한 동착을 요청할 때 요청헤더에 추가하여 요청하고 서버에서는 이 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인 후 요청을 처리하고 응답을 하고

쿠키도 비슷한 원리지만 서버에 저장되는 것이 아니라 파일에 저장되고 클라이언트가 수정할 수 있기 때문에 보안에 취약하다는 의미인 것 같습니다.

 

'IT 개념' 카테고리의 다른 글

내가 하는 디버그  (0) 2021.08.03
Javascript input 입력값 가져오기  (0) 2021.07.31
Web 서버와 WAS의 차이점  (0) 2021.07.31
맨날 헷갈리고 까먹는 정규화  (0) 2021.07.22
Spring 아이디 찾기 기능  (0) 2021.07.22