세션이란?
세션(Session)은 웹 애플리케이션에서 사용자와 서버 간의 대화를 지속적으로 유지하는 방법을 의미합니다.
웹은 기본적으로 **무상태(stateless)**이기 때문에, 사용자가 페이지를 이동할 때마다 서버는 이전 요청에 대해 기억하지 못합니다. 세션은 이를 해결하기 위해 사용됩니다.
- 로그인 상태 유지
- 사용자가 로그인하면 서버는 그 정보를 세션에 저장합니다.
- 이후 사용자가 다른 페이지로 이동해도, 서버는 세션을 참고해 "이 사용자는 로그인된 상태구나"라고 알 수 있습니다.
- 쇼핑몰 장바구니
- 사용자가 상품을 장바구니에 추가하면, 그 정보가 세션에 저장됩니다.
- 사용자가 페이지를 이동하거나 새로고침을 해도, 장바구니 상태는 유지됩니다.
세션의 동작 원리
- 사용자가 서버에 접속하면
서버는 사용자를 식별하기 위해 고유한 세션 ID를 생성합니다.
이 ID는 사용자의 브라우저에 쿠키로 저장됩니다. - 사용자가 요청을 보낼 때
브라우저는 세션 ID를 서버에 전달합니다.
서버는 이 ID를 확인해 세션에 저장된 데이터를 찾아냅니다. - 세션이 종료될 때
- 사용자가 로그아웃하거나,
- 세션의 유효 시간이 지나면 세션은 삭제됩니다.
세션과 쿠키의 차이
- 세션: 서버에 데이터를 저장. 보안이 더 좋음.
- 쿠키: 클라이언트(브라우저)에 데이터를 저장. 사용자의 브라우저에 저장된 정보가 서버로 전달됨.
세션은 놀이공원 팔찌와 비슷합니다.
입장 시 받은 팔찌(세션 ID)를 보여주면, 놀이공원 직원(서버)이 "이 사람은 입장권이 있어"라고 알아봅니다.
팔찌가 없으면 다시 확인해야 합니다.
세션 타임아웃 설정 우선순위
1. session. setMaxInactiveInterval
2. 웹프로젝트의 WEB-INF/web.xml
3. 톰캣 conf의 web.xml
1. session. setMaxInactiveInterval
Java(JSP/Spring)에는 세션 타임아웃 우선순위가 있다. 또한 값 세팅할 때 단위에 주의해야 한다.
setMaxInactiveInterval 메서드 실행한 경우
특정한 세션 객체의 멤버메서드인 setMaxInactiveInterval 를 실행한 경우, 최우선순위로 적용된다.
<%
session.setMaxInactiveInterval(1800);
%>
setMaxInactiveInterval 메서드의 시간단위는 초 단위이다. 1800 이라고 쓰면 30분을 의미한다.
2. 웹프로젝트의 web.xml
웹프로젝트의 web.xml : [웹루트경로]/WEB-INF/web.xml 내의 session-timeout 값
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session-timeout 태그의 단위는 분 단위이다. 30 이라고 쓰면 30분을 의미한다.
3. 톰캣 conf의 web.xml
WAS의 web.xml : [톰캣경로]/conf/web.xml 내의 session-timeout 값
두번째 우선순위에 해당하는 web.xml 내용에 설정값이 없는 경우 이곳 설정을 따른다.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session-timeout 태그의 단위는 분 단위이다. 30 이라고 쓰면 30분을 의미한다.
공통적으로 세션타임아웃 값으로 -1을 입력하면 무제한 유지된다.
세션 타임아웃 설정 출처 : https://dololak.tistory.com/706
'STUDY > SpringLegacy' 카테고리의 다른 글
[Spring] MultipartFile 다중 파일 업로드 받아 API에 전달하는 컨트롤러 구현 (0) | 2024.11.22 |
---|---|
[Spring] maven grpc client 구현을 위한 pom.xml 작성 (0) | 2024.11.19 |
[Spring] Interceptor 인터셉터 (0) | 2024.11.09 |
[STS] Spring MVC Project 템플릿 없음 해결방법 (0) | 2024.10.11 |
[Spring] Spring에서 클라이언트로부터 파라미터를 받는 방법과 Content-Type 설정 (0) | 2024.07.30 |