Stateless 한 HTTP 프로토콜에서 요청과 요청 간의 관계를 유지하기 위해서 도입된 개념
Connection-oriented: HTTP는 기본적으로 연결을 유지하지 않는 상태로 동작. 즉, 클라이언트가 서버에 요청을 보내면 서버는 응답을 보내고 연결을 종료. 이후의 요청은 새로운 연결을 통해 이루어진다.
Stateless: HTTP는 상태를 유지하지 않는 프로토콜이다. 즉, 각각의 요청은 이전 요청과는 독립적으로 처리된다. 이는 서버가 클라이언트의 상태를 기억하지 않는다는 것을 의미. 이 특징은 서버의 부하를 줄이고 확장성을 향상시킨다.
하지만, 실제로는 상태, 데이터 유지가 필요한 경우가 많다.
정보가 유지되지 않으면, 매번 페이지를 이동할 때마다 로그인을 다시 하거나, 결제정보가 사라지는 일이 발생 할 수 있다. 따라서, Stateful 경우를 대처하기 위해 쿠키와 세션을 사용한다. 쿠키와 세션의 차이점은 크게 상태 정보의 저장 위치이다. 쿠키는 '클라이언트(=브라우저)'에 저장하고, 세션은 '서버'에 저장한다.
연속적 통신을 위해 사용하는것이 쿠키와 세션이다.
HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있다. 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문.
세션은 일정시간 동안 여러 페이지 요청 사이에서 사용자에 대한 정보를 저장하는 방법. 쿠키와 달리 세션 데이터는 서버에 저장. 일정시간이 지나면 연결을 종료.
쿠키: 클라이언트에 저장되며, 클라이언트가 서버에 요청을 보낼 때마다 요청과 함께 서버로 전송
세션: 세션은 서버 측에 저장. 서버는 각 클라이언트에 대한 고유한 세션을 유지하고, 세션 데이터는 서버의 메모리나 데이터베이스에 저장.
쿠키: 쿠키는 작은 데이터 조각으로 제한되며 주로 사용자의 상태 정보나 사용자 설정과 같은 간단한 데이터를 저장합니다.
세션: 세션은 보다 큰 데이터를 저장할 수 있으며, 클라이언트와 서버 간의 상태 정보를 저장하는 데 사용. 로그인 정보, 장바구니 내역, 사용자 프로필 등과 같은 데이터를 저장.
쿠키: 쿠키는 클라이언트 측에서 지정된 만료 날짜까지 영구적으로 저장될 수 있거나, 브라우저가 종료될 때까지 일시적으로 유지.
세션: 세션은 클라이언트가 웹사이트를 떠날 때(일반적으로 브라우저가 종료될 때) 또는 일정 시간이 경과한 후에 만료. 세션은 서버에서 유지되며, 클라이언트와의 연결이 종료될 때 삭제.
쿠키: 쿠키는 클라이언트 측에 저장되므로 보안에 취약. 민감한 데이터를 저장할 때는 보안 문제에 유의.
세션: 세션은 서버 측에 저장되기 때문에 상대적으로 안전. 민감한 데이터는 서버에 저장되므로 클라이언트에서 직접 액세스할 수 없다.
**세션 ID를 잘못 생성, 관리했을 때 발생할 수 있는 문제점
인증 전과 인증 후 동일한 세션 ID를 유지하는 경우 세션 ID 고정
세션 ID 생성 규칙을 유추할 수 있는 경우 세션 ID 추출
(스크립트 코드를 이용해서) 브라우저에 저장된 세션 ID를 탈취할 수 있는 경우 세션 ID 훔치기 == XSS 공격
쿠키: 쿠키는 주로 사용자 설정, 사용자 추적, 광고 타겟팅 등과 같은 간단한 작업에 사용.
세션: 세션은 주로 사용자 인증, 상태 관리, 장바구니 관리, 사용자 데이터 저장 등과 같은 중요한 작업에 사용.