지식

[지식] 클라이언트마다 세션이 독립되는 이유(JSESSIONID)

개발로 먹고 살자 2021. 9. 23. 18:06

브라우저마다 세션 값이 겹치지 않는 이유

 - 브라우저 별로 별도의 쿠키를 관리

 

HTTP의 경우 클라이언트가 서버를 호출(url에 따라 특정 페이지를 호출)하고 연결이 끊어짐

그 후 클라이언트가 다른 페이지로 넘어갈 때 서버는 클라이언트 구분을 하지 못함

그래서 클라이언트가 서버를 호출할 경우 톰캣에서 JSESSIONID 쿠키를 클라이언트에게 발급해주고

이 값으로 세션을 유지

 

JSESSIONID?

톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키

HTTP 프로토콜은 stateless하다. 요청시마다 새로운 연결이 생성되고 응답후 연결은

끊기게 되므로 상태를 유지할 수 없다.

따라서, 상태를 저장하기 위해서 톰캣은 JSESSIONID 쿠키를 클라이언트에게 발급해주

고 이 값을 통해 세션을 유지할 수 있도록 한다.

 

동작방식에 대해서

1. 브라우저에 최초 접근시 톰캣은 Response 헤더에 다음과 같이 JSESSIONID값이 발급

된다.

Set-Cookie: JSESSIONID=3CB361E0BE1A9A7DE7DB926DF0772BAE

 

2. 브라우저 재요청시 Response를 통해 받은 JSESSIONIDRequest 헤더의 쿠키에 값

을 넣어 서버에 요청한다. 쿠키를 통해 JSESSIONID값을 전달받게 되면 서버는 새로운 J

SESSIONID 값을 Response 헤더에 발급하지 않는다.

 

3. 클라이언트로부터 전달받은 JSESSIONID값을 기준으로 서버에서는 세션 메모리 영역

에 상태를 유지할 값들을 저장할 수 있게 된다. (HttpSession )

 

한계

캣 컨테이너를 2대 이상 사용하게 될 경우 세션을 유지할 수 없다. 유지가 되기 위

해서는 세션 클러스터링 환경을 구축하여야 한다.

 

JSESSIONID는 서블릿 컨테이너가 있는 웹 서버에 접속한 여러 사용자 각각의 세션 공간을 관리하기 위해 만들어진 일종의 키 값

'지식' 카테고리의 다른 글

[지식] Content-Type Header  (0) 2021.12.30
[지식] spring controller에서 sesstion 값 사용  (0) 2021.12.26
[지식] 프로그래밍 언어론  (0) 2021.11.23
[지식] 웹과 앱의 차이점  (0) 2021.09.25
[지식] 쿠키와 세션  (0) 2021.09.23