쿠키와 세션
쿠키(Cookie) | 세션(Session) | |
개념 | HTTP의 일종으로 사용자가 어떤 웹 사이트를 방문할 경우, 그 사이트가 사용하는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일. 이름-값 쌍으로 이루어져 있다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다. |
세션은 일정 기간 동안 같은 사용자(클라이언트)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 세션은 쿠키를 기반으로 하지만 쿠키와 다르게 서버 측에서 저장하고 관리한다. |
특징 | - 세션이라는 공간에 클라이언트 정보를 쿠키값으로 저장해두면 로그인을 추가로 해서 DB에 다녀올 필요없이 해당 아이디로 접속가능하다. 클라이언트가 request하면 무조건 쿠키가 생긴다. - HTTP방식으로 통신했을 때 FIN신호가 발생하면서 물리적인 연결이 종료된다. 이때 쿠키값을 가지고 있으면 다시 이전에 접속했던 곳으로 접속가능하다. |
- 서버는 세션 ID를 이용해 클라이언트를 구분하며, 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 세션을 유지한다. |
차이 | - 중요하지 않은 값 저장 - 클라이언트가 쿠키를 보관한다. (서버의 자원사용X) 쿠키는 정보를 직접 저장하고 요청을 보낼 수 있다. 만약 쿠키에 사용자의 주민번호 같은 민감한 정보를 그대로 담아 HTTP 요청을 보낸다고 하자. 이때 중간에 정보를 스니핑 당할 수도 있다. 쿠키는 만료시간 동안 파일로 저장되므로 브라우저를 종료해도 정보가 남아있다. |
- 중요한 값 저장 / 서버가 저장한다. - 세션은 서버의 자원을 사용한다. - 세션의 scope는 어플리케이션 전체이다. - 세션은 쿠키를 이용해 쿠키에 세션 ID만 저장하고 서버에서 세션을 처리하기 때문에 비교적 보안성이 좋다. - 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다. |
공통점 | - 어떠한 값을 저장한다.(세션의 쿠키값은 클라이언트의 쿠키값과 일치한다) - 쿠키와 세션은 모두 서버가 만든다. - FIN신호로 인한 물리적인 연결종료를 논리적으로 연결시킬 수 있도록 할 수 있다. (논리적인 연결이 필요해서 쿠키/세션을 활용했지만, 쿠키/세션이 논리적인 연결을 위해서만 존재하는 건 아님) |
로그인 과정에서의 쿠기와 세션 비교정리
쿠키를 사용한 로그인
사용자가 로그인 양식에 사용자 이름과 비밀번호를 입력하고 제출한다.
서버는 입력된 자격 증명을 확인하고, 사용자가 유효한 경우 응답으로
쿠키를 생성하여 클라이언트에게 보낸다. 쿠키에는 일반적으로
세션 식별자(session ID)와 같은 정보가 포함되어 있다.
클라이언트는 이 쿠키를 저장하고, 이후 서버에 요청을 보낼 때마다
해당 쿠키를 함께 전송한다. 서버는 요청에서 받은 쿠키를 확인하고,
세션 ID를 기반으로 사용자의 인증 및 권한을 유지한다.
세션을 사용한 로그인
사용자가 로그인 양식에 사용자 이름과 비밀번호를 입력하고 제출한다.
서버는 입력된 자격 증명을 확인하고, 사용자가 유효한 경우 새로운 세션을 생성한다.
세션은 서버 측에서 유지되며, 세션 ID를 클라이언트에게 전달한다.
클라이언트는 이 세션 ID를 쿠키나 URL 매개변수 등을 통해 저장한다.
클라이언트가 서버에 요청을 보낼 때마다 세션 ID가 함께 전송되며,
서버는 이를 기반으로 세션을 식별하고 사용자의 상태를 유지한다.
보안적으로, 세션은 일반적으로 쿠키보다 안전하다.
왜냐하면 세션 데이터는 서버에 저장되기 때문에 클라이언트에서
변경할 수 없기 때문이다. 그러나 쿠키는 클라이언트 측에 저장되므로
악의적인 사용자가 쿠키를 조작하거나 탈취할 위험이 있다.
따라서 중요한 보안 정보를 다룰 때는 세션을 사용하는 것이 권장된다.
'Web > Network' 카테고리의 다른 글
[Network] 로드 밸런싱(Load Balancing), 스케일 아웃(Scale out), 스케일 업(Scale up) (0) | 2024.02.22 |
---|---|
[Network] 사설 IP와 공용 IP, IPv4와 IPv6 (0) | 2024.02.22 |
[Web] 프로토콜(Protocol) : HTTP, TCP, UDP, IP + Port(포트번호) 그리고 OSI 7 Layer (0) | 2024.02.10 |
[Web] HTTP와 HTTPS(HTTP Secure), SSL/TLS, 핸드셰이크 (0) | 2024.01.30 |
[Web] 웹 서버와 웹 브라우저의 통신 : HTTP, DNS, 라우터 (0) | 2024.01.28 |