개발/개념 설명
세션(Session), 쿠키(Cookie)
kakk789
2022. 2. 17. 15:28
서버는 쿠키 값에 해당 사용자를 식별할 수 있는 대한 세션 ID를 저장하고,
추후에 Client(브라우저)가 요청할 때 세션 ID만 보고 사용자를 식별하고 민감 데이터를 저장 / 전송
* 세션 ID 란? JSESSIONID 와 같은 것
HTTP 프로토콜
비연결성(Connectionless)과 비상태성(Stateless)이라는 특징이 존재
장점
- 연결을 유지 하지 않고 상태 정보는 저장하지 않기에 서버 자원을 아낄 수 있음
단점
- 사용자 식별이 불가능해 매번 새로운 사용자로 인식함
쿠키(Cookie)
서버 대신 Client의 정보들을 웹 브라우저에 저장하고 사용자가 요청할 때 정보를 서버로 보내 사용자 식별이 가능하다.
- 클라이언트가 서버에 요청 하면
서버가 응답할 때 쿠키에 저장하고자 하는 정보를 Header의 Set-Cookie로 전달 - 그럼 클라이언트는 요청 시 Cookie 필드에 요청을 포함하여 서버에 전달한다.
각기 다른 브라우저간 개별 쿠키는 공유될 수 없음
쿠키 세가지 목적
1. 세션 관리(Session Management)
- 로그인, 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보를 저장
2. 개인화(Personalization)
- 사용자마다 다르게 그 사람의 페이지를 보여줄 수 있다
3. 트래킹(Tracking)
- 사용자의 행동을 기록
특 징
- 쿠키는 서버가 웹 브라우저에 저장하는 데이터
- 쿠키의 데이터 형태는 Key 와 Value로 구성되고 String으로만 이루어져 있습니다.
- 4KB 이상 저장할 수는 없음
용 도
쿠키로 인해 페이지 이동 시 재 로그인이 필요 하지 않고 유지가 가능하다
(쿠키가 없으면 다음 페이지로 파라미터를 넘겨야함)
- '팝업의 다시보지 않기'
- '회원 인증 정보'
- '행동 분석 트래킹 ID'
- '장바구니'
쿠키의 2가지 종류 (Session쿠키, Permanent 쿠키)
1. Session 쿠키
- 브라우저가 종료될 때 제거되는 쿠키
2. Permanent 쿠키
- 단어 그대로 브라우저가 종료 되어도 유지되는 쿠키
- 쿠키 생성시 Expires 혹은 Max-Age 옵션을 추가하면 된다.
쿠키 제어 옵션
Expires : 쿠키 만료 날짜 설정
Max-Age : 쿠키 유지 시간 설정
Secure : https 사용 여부
HttpOnly : CSRF 공격방지 (JavaScript의 Document.cookie API 접근 할 수 없도록 함
Domain, Path : 쿠키의 스코프를 정의(쿠키가 사용되는 범위)
SameSite : 서로다른 도메인 간의 쿠키 전송에 대한 보안을 설정
None - 설정 안함
Lax - 허용된 도메인에 대해서만 예외 (크롬 기본 값)
Strict - 다른 도메인 요청에는 항상 전송하지 않음
SameParty : 최상위 도메인과 동일한 First-Party의 일부일 때 쿠키를 포함
이해가 잘 안가고, 정보가 많이 없는데 SameSite와 비슷한 기능이지 않을까 싶다.
SameSite의 Lax/None 그리고 Secure 설정이 되어 있어야 한다고 한다.
세션(Session)
첫번째 의미 : 한 브라우저를 통해 서버로의 접속과 종료 시점을 하나의 상태로 보고 유지하는 기술
두번째 의미 : 나라는 것을 인증하기 위한 기술 (Session ID를 통한 인증)
: 결론적으로, DB에 Session ID와 민감정보를 담고 있음
(민감정보 - 브라우저에 Cookie로 저장하기 애매한 정보(비밀번호, 주소 등))
- 클라이언트단 쿠키로 저장할 수 없을 법한 민감 정보들을 서버단 세션에 저장
- 서버로부터 생성된 Session ID를 서버와 브라우저(쿠키)에 저장
- 클라이언트(브라우저)는 Session ID를 출입증 처럼 서버에 보여주면 서버는 식별하여 요청 정보에 대한 응답 값을 리턴해줌
WebSocket(웹소켓) 과 Session(세션)
-> Session은 연결 상태 유지라기 보다는 나라는 것을 인증하기 위한 것이다.
(브라우저 종료 전 or 만료 전 까지)
-> WebSocket은 연결 상태 유지 즉, 통신이 계속 유지되고 있는 것이다. (맞나..?)
참고
https://www.hahwul.com/2020/01/18/samesite-lax/
https://seob.dev/posts/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%BF%A0%ED%82%A4%EC%99%80-SameSite-%EC%86%8D%EC%84%B1/
https://januaryman.tistory.com/160
https://tbtb7-sw.tistory.com/157?category=813367
https://developer.chrome.com/blog/first-party-sets-sameparty/
반응형