쿠키와 세션
HTTP는 무상태(Stateless) 프로토콜이다.
따라서 통신이 끝나면 상태(정보)를 유지하지 않는다.
이를 보완하기 위해 사용하는 것이 쿠키와 세션이다.
통신이 끝나도 이전 응답에 대한 정보가 필요할 때도 있고, 어떤 상태를 유지해야 할 때도 있다.
예를 들면 한번 로그인하면 로그아웃 전까지 로그인 상태가 유지되어야 한다.
이때, 쿠키를 이용하여 무상태 프로토콜인 HTTP에서 상태를 유지할 수 있다.
서버에서 클라이언트로 쿠키를 전달하면, 클라이언트는 그 쿠키를 저장해 뒀다가 HTTP 요청 시 서버로 전달한다.
그러나 쿠키는 보안 문제가 있다.
우선 쿠키의 값은 클라이언트에서 쉽게 조회, 변경할 수 있다. 그 값을 이용해서 악의적인 요청을 할 수도 있다.
따라서 사용자가 알아볼 수 없는 값을 쿠키의 value로 설정하고, 그 값을 서버에서 매핑해서 진짜 데이터를 보관하는 것이 세션이다.
세션은 쿠키에 기반하여 만들어졌고, 쿠키와 똑같이 name, value 쌍으로 이루어져 있지만,
value를 임의의 랜덤 값(uuid)으로 지정하여 서버에서 진짜 값을 관리한다는 차이점이 있다.
쿠키 사용
Set-Cookie
- 서버에서 클라이언트로 쿠키 전달(응답)
Cookie
- 클라이언트가 서버로부터 받은 쿠키를 저장하고, HTTP 요청 시 항상 서버로 전달
처음 접근 시 (로그인)
로그인 이후 다시 접근 시
쿠키 상세 정보
쿠키 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽을 추가로 유발한다. 따라서 최소한의 정보만 사용하는 것이 좋다. 위에서 말했듯, 쿠키는 누구나 열람할 수 있기 때문에 보안에 민감한 데이터는 쿠키에 저장하면 안 되고, 세션을 사용해야 한다.
Set-Cookie: id=hello; expires=Fri, 18-July-2023 00:00:00 GMT; path=/; domain=google.com; Secure
생명 주기 expires, max-age
expires
만료일(시간)이 되면 쿠키를 삭제한다.
max-age
max-age=600으로 지정하면 600초 뒤에 쿠키가 삭제된다.
0이나 음수를 지정하면 쿠키가 삭제된다.
- 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료 시까지만 유지된다.
- 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지된다.
도메인 domain
ex) domain=google.com
지정한 도메인과 서브도메인에서 쿠키에 접근할 수 있게 된다.
- google.com , hello.google.com에서도 접근 가능
생략 시 현재 문서 기준 도메인에만 적용된다.
- google.com에서는 접근 가능, hello.google.com에서는 접근 불가
경로 path
path로 지정한 경로를 포함한 하위 경로 페이지에서만 쿠키에 접근할 수 있다.
일반적으로는 path=/ 루트로 지정한다.
보안 Secure
Secure
- 쿠키는 http, https를 구분하지 않고 전송한다.
- Secure 적용 시에는 https인 경우에만 전송된다.
쿠키와 세션 - Spring에서 사용 예제
2023.04.21 - [Spring_Web/SpringBoot] - [Spring] 세션, 쿠키, @SessionAttribute 로그인 확인
'컴퓨터 공학 > Web & Network' 카테고리의 다른 글
[Web/Network] REST API란? (0) | 2023.07.19 |
---|---|
[Web/HTTP] Web의 3요소와 HTTP 프로토콜, 특징 (0) | 2023.07.19 |
[Web/HTTP] HTTP 상태 코드(Status Code) (0) | 2023.07.18 |
[Web/HTTP] HTTP Methods (0) | 2023.07.18 |
[Web/HTTP] HTTP 메시지(요청, 응답) 구조 (0) | 2023.07.17 |