session(세션)
한번쯤 웹페이지를 사용하면서 이런 경고창 혹은 문구를 본적이 있을 것이다. 그렇다면 세션이란 도대체 무엇일까?
세션은 클라이언트와 웹서버 간 네트워크 연결이 지속 유지되고 있는 상태를 말한다. 즉 사용자가 브라우저를 열어 서버에 접속한 뒤 접속을 종료할 때 시점 까지를 말한다.
HTTP 프로토콜은 비접속형 프로토콜이므로, 매 접속시마다 새로운 네트워크 연결이 이루어지는데, 세션이 연결 유지를 가능하게 해준다.
세션기반 인증과정(Session-based Authentication
사용자가 웹사이트에서 아이디 및 비밀번호를 이용해서 로그인을 시도하면 어떤 과정을 거치게 될까?
1. 아이디 / 비밀번호를 입력하고 로그인에 성공한다.
👉 사용자가 인증에 성공한 상태는 세션이라고 부른다.
2. 인증에 성공한 세션을 서버는 일종의 저장소에 저장한다.
👉 in-memory(자바스크립트 객체처럼) or 세션스토어에 저장
3.세션이 만들어지면 각 세션을 구분할 수있는 세션 아이디가 만들어진다.
👉 이때 사용자에 세션을 성공을 증명할 수단으로 세션 아이디를
전달한다.
4. 이때!! 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하는데 쿠키에 서버에서 발급한 세션아이디를 저장한다.
👉 쿠키를 통해 유효한 세션아이디가 서버에 전달되고 세션 스토어에 해당세션이 존재한다면 서버는 요청 접근이 가능하다고 판단을 한다.
로그아웃의 경우
세션 아이디가 담긴 쿠키는 클라이언트에 저장되어있고,
서버는 세션을 저장하고있다.
👨💻 클라이언트 { 🍪 쿠키 { 🔑세션아이디 }}
🗄서버 { 🔑세션 }
이해를 돕기위해 위와 같이 표현해 봤습니다.
서버는 그저 세션아이디로만 요청을 판단한다.
서버가 클라이언트의 쿠키를 임의로 삭제할 수 없다. 대신 set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신해야 한다.