HTTP 기반으로 동작하는 클라이언트가 서버에 정보를 요청할 때 생성되는 상태정보를 세션이라고 한다. 세션을 통해 서버와 클라이언트 간의 지속적인 연결이 가능하다. 클라이언트는 지속적으로 서버에 특정 동작을 요청할 수 있으며 서버는 실행결과를 클라이언트에 응답할 수 있다.
등장배경
Http 프로토콜은 불특정 다수인 클라이언트와 지속적으로 연결하려면 웹 서버의 부하가 매우 크기 때문에 요청하고 응답 받으면 즉시 연결을 끊는 방식(connection-less, state-less)으로 동작이 된다. 이로인해 각 페이지마다 이전 페이지에서 했던 데이터 및 기능들을 현재 페이지에서 알 수가 없다.
즉, 첫 화면에서 선택한 물건을 장바구니에 담고 다음 페이지에서 결제할 때 이전화면의 장바구니에 담긴 정보를 확인할 수 없다. 이러한 http기반의 문제점을 극복하기 위해 사용자의 상태정보를 관리하는 메커니즘이 필요한데 이것을 세션관리(session tracking)이라고 한다.
💡 Connection-less : 요청을 보내면 서버는 응답을 보내고 연결을 끊는다.
💡 State-less : 연결이 끊어지는 순간 모든 상태 정보가 사라진다.
세션 방식
HttpSession
API를 이용한 세션 처리 방식Cookiee
API를 이용한 쿠키 처리 방식
세션 (Session)
세션(session)은 사용자의 상태정보를 서버에서 관리하는 메커니즘을 의미한다. 세션의 정보는 클라이언트가 서버에 접속해서 브라우저를 종료할 때까지 유지된다.(session scope) 상태정보가 서버에 저장되기 때문에 서버의 부하가 클 수 있어 time-out 제한을 두어 일정시간(기본 30분)동안 새로운 요청이 없으면 세션 정보를 유지하지 않고 제거한다.
- HttpSession API 이용
- 서버에 데이터 저장
- 자바의 모든 데이터가 저장 가능
- 웹 브라우저와 동일한 lifecycle
- time-out 지정 가능
HttpSession API
세션(session)은 HttpSession API 를 이용하여 세션 데이터를 다룰 수 있다.
세션 얻기
// session 영역이 있으면 반환. 없으면 새로 생성되어 반환
HttpSession session = request.getSession();
// session 영역이 있으면 반환. 없으면 null 반환
HttpSession session = request.getSession(false);
세션에 상태정보 저장 및 조회, 제거
session 영역에 필요한 값을 저장하고 조회하거나 삭제할 수 있다. 이 때, 세션에 저장된 상태정보는 session scope를 따르기 때문에 브라우저의 lifecycle과 동일하다.
HttpSession session = request.getSession();
session.setAttribute(String key, Object obj); // 상태정보 저장
session.getAttribute(String key); // 조회
session.removeAttribute(String key); // 삭제
세션 영역제거
1. time-out 지정하여 제거
- setMaxInactiveInterval(second) 메서드 사용
- web.xml 사용
// setMaxInactiveInterval() 사용
session.setMaxInactiveInterval(60*60*24); // 24시간 유지
// web.xml
<web-app>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
2. 즉시 제거
- invalidate() 메서드 사용
session.invalidate(); // 즉시제거
[JSP&Servlet] 세션을 활용한 간단한 로그인&로그아웃
세션(Session)이란? 클라이언트가 서버에 정보를 요청할 때 생성되는 상태정보 서버에 데이터를 저장 LoginServlet.java package com.controller; @WebServlet("/login") public class LoginServlet extends HttpServlet { protected vo
gangintheremark.tistory.com
'WebServer > JSP&Servlet' 카테고리의 다른 글
[JSP&Servlet] 세션을 활용한 간단한 로그인&로그아웃 (0) | 2023.08.21 |
---|---|
[JSP&Servlet] 쿠키 관리 (Cookie) (0) | 2023.08.17 |
[Servlet] 요청 위임 (0) | 2023.08.16 |
[Servlet] 서블릿과 DB 연동 (MyBatis 활용) (0) | 2023.08.15 |
[Servlet] Filter API (0) | 2023.08.10 |