30 Aug 2020
Session과 Cookie
Session과 Cookie의 차이와 동작원리
쿠키(Cookie)
-
쿠키는 서버가 사용자의 웹 브라우저 저장하는 데이터이다.
-
쿠키는 key-value형태로 String으로 이루어져 있다.
-
4KB이상 저장할 수 없다.
브라우저 마다 저장되는 쿠키가 다르다. 서버에서는 브라우저가 다르면 다른 사용자로 인식한다.
쿠키 동작 순서
-
클라이언트가 서버에 요청을 하면 서버가 응답할 때 쿠키에 저장하고자 하는 정보를 set-Cookie를 통해
해더에 담아 함께 전달한다.
Set-Cookie:
-
Cookie:
서버가 쿠키와 함께 아래와 같은 응답을 클라이언트에게 전달했다면
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
이후에는 해당 클라이언트는 매번 저장된 쿠키를 헤더에 포함시켜 요청을 보내게 된다.
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
Session 쿠키 , Permanent쿠기
Session cookie
-
만료날짜/시간을 정하지 않으면 세션 쿠키에 저장된다.
-
세션 쿠키는 브라우저 메모리에 저장되므로 브라우저가 종료되면 쿠키는 사라진다.
Permanent Cookie
-
만료날짜/시간을 정하게 되면 Permanent쿠기에 저장된다
-
Permanent쿠기는 파일로 저장되므로 브라우저가 종료되더라도 쿠키는 남아있게 된다.
Session
서버에 클라이언트의 상태정보를 저장하는 기술로 논리적인 연결을 하며
웹 서버에 client에 대한 정보를 저장하고 client에게는 client를 구분할 수 있는 ID를 부여하는데
이것을 세션이라 한다.
세션 동작 순서
1. 클라이언트가 서버에 처음으로 Request를 보냄 (첫 요청이기 때문에 session id가 존재하지 않음)
2. 서버에서는 session id 쿠키 값이 없는 것을 확인하고 새로 발급해서 응답
3. 이후 클라이언트는 전달받은 session id 값을 매 요청마다 헤더 쿠키에 넣어서 요청
4. 서버는 session id를 확인하여 사용자를 식별
5. 클라이언트가 로그인을 요청하면 서버는 session을 로그인한 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답
6. 이후 클라이언트는 로그인 사용자의 session id 쿠키를 요청과 함께 전달하고 서버에서도 로그인된 사용자로 식별 가능
7. 클라이언트 종료 (브라우저 종료) 시 session id 제거, 서버에서도 세션 제거
면접 질문 예시
질문1)
String user=httpSession.getAttribute("user");
user라는 key값으로 가져오는 “user”는 사용자 A가 접속해도 “user”로 값을 가져오고 사용자 B가 접속해도 “user”로 가져오는데 어떻게 A와 B가 접속했을때 서로 다른 결과값을 받을 수 있는가?
답변1)
클라이언트가 처음으로 웹 어플리케이션을 방문하거나 request.getSession()을 통해 HttpSession을
처음으로 가져오면 서블릿 컨테이너는 새로운 HttpSession객체를 생성하고 unique한 ID를 생성 후,
서버의 메모리에 저장한다. 또한 서블릿 컨테이너는 JSESSIONID란 이름을 key로, 생성한 session ID를
웹 브라우저와 웹 서버가 준수해야 할 HTTP Cookie 스펙에 따라 클라이언트는 cookie가 유효한 동안은