일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- springboot
- mssql
- table
- GIT
- 자바스크립트
- Vue
- Spring
- sql
- component
- jdk
- javascript
- Intellij
- 자바
- reactjs
- 컴포넌트
- DATABASE
- JS
- 쿼리
- 개발
- restapi
- 데이터베이스
- 리액트
- React
- 스프링부트
- 스프링
- crud
- 개발공부
- EXTJS
- 보안취약점
- Today
- Total
준준의 기록일지
[Session] JSESSIONID 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
고객사 포털 구축 작업 중 로그인 관련 수정 요청을 팀에서 받았다.
로그인 / 로그아웃 시 JSESSIONID 파기 ,발급 시점 조정에 관한 부분으로 관련 요청 사항을 봤을때 부끄럽게도 JSESSIONID가 뭔지 몰랐다.. 세션인가??근데 J는 뭐지? (검색해도 나오지는 않는듯..)
요청사항
- 로그인 성공 직후에 기존 세션 파기 , 새 세션 발급
- 로그아웃 직후에 기존 세션 파기, 새 세션 발급
이에 작업된 내역을 확인해보니,
1
2
3
4
5
6
7
|
if(session != null) {
session.invalidate();
session = request.getSession(true);
session.setAttribute("account", account);
}
|
|
cs |
request.getSession(true)
- HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로운 세션을 생성한다.
request.getSession(false)
- HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새롭게 생성하지 않고 그냥 null을 반환한다.
session.isNew()
- 세로 생성된 세션인지 check
Session ID를 쿠키에 저장한다? Session Id ? Session Cookie?
Session Cookie (브라우저가 닫히면 만료됨)
세션 식별정보를 쿠키로 저장하는 정책을 사용할 경우 클라이언트의 쿠키로 저장된 세션 데이터 전체(JSESSIONID, PHPSESSIONID 등)를 의미하고, 세션 ID는 그 쿠키에 저장되어 있는 값을 의미한다.
Session ID ( 쿠키에 종속된 속성으로 session의 id값을 가진다.)
서버에서 로그인 된 사용자의 세션을 식별하는 값을 의미한다. (사용자가 동일해도 여러개의 세션을 가질 수 있다? HOW?)
즉, 서버가 클라이언트에 세션ID를 부여하는 방법 중 하나가 쿠키를 이용하는 것이다. 세션Id를 클라이언트에 저장하기 위해 쿠키를 이용하는 것!!
서버는 JSESSIONID라는 이름으로 세션ID를 클라이언트에 저장해놓으면 클라이언트는 앞으로 모든 요청 헤더에 이 쿠키값을 포함시켜 보내고 서버가 이를 식별할 수 있다.
쿠키의 만료시간이 되면 클라이언트 측 쿠키는 소멸되기 때문에 동일한 클라이언트가 보낸 요청이라고 해도 서버는 새로운 클라이언트로 인식하게 된다. 하지만 이전에 서버측에 생성된 세션 정보는 유지될 수 있고, 아직 "Invalidate"가 되지 않았을 것.
JSESSIONID
톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키.
HTTP 프로토콜은 stateless하다. 요청시마다 새로운 연결이 생성되고 응답후 연결은 끈히게 되므로 상태를 유지할 수 없다.
따라서 상태를 저장하기 위해서 톰캣은 JSESSIONID 쿠키를 클라이언트에게 발급해주고 이 값을 통해 세션을 유지할 수 있도록 한다.
동작 방식
- 브라우저에 최초 접근 시 톰캣은 Response 헤더에 다음과 같이 JSESSIONID값이 발급된다.
- Set-Cookie :
- 브라우저 재요청시 Response를 통해 받은 JSESSIONID를 Request 헤더의 쿠키에 값을 넣어 서버에 요청한다. 쿠키를 통해 JSESSIONID 값을 전달받게 되면 서버는 새로운 JSESSIONID 값을 Response 헤더에 발급받지 않는다.
- 클라이언트로부터 전달받은 JSESSIONID값을 기준으로 서버에서는 세션 메모리 영역에 상태를 유지할 값들을 저장할 수 있게 된다. (HttpSession 등)
유지 범위
- 동일한 Full 도메인 ( 서브도메인이 다를 경우 쿠키가 유지되지 않기 때문)
- 포트번호는 달라도 무관하다.
한계
- 톰캣 컨테이너를 2대 이상 사용하게 될 경우 세션을 유지할 수 없다. 유지가 되기 위해서는 세션 클러스터링 환경을 구축하여야 한다.
출처
'개발 전체' 카테고리의 다른 글
[JAVA7] Try-with-Resources 자원 자동할당 (보안취약점 보완) (0) | 2021.08.30 |
---|---|
[Git] Git 소스트리 key chain denied (0) | 2021.08.10 |
[보안] XSS 취약점 필터 - Lucy-xss-filter-servlet (0) | 2021.08.02 |
[엘리님 유튜브정리] 서버사이드 렌더링 (0) | 2021.07.06 |
[Eclipse] 이클립스 2개 켜기 (0) | 2021.04.08 |