JSP에서 세션 관리: 세션 시작, 데이터 저장 및 불러오기, 타임아웃

JSP에서 세션 관리: 세션 시작, 데이터 저장 및 불러오기, 타임아웃

이번 글에서는 JSP에서 세션을 관리하는 방법에 대해 기본 개념부터 실습 예제까지 다루어 보겠습니다. 세션은 웹 애플리케이션에서 사용자의 상태를 서버 측에서 유지하는 중요한 도구입니다.

1. 세션의 정의와 역할

세션은 사용자가 웹 애플리케이션과 상호작용하는 동안 서버가 사용자의 상태를 유지하기 위해 사용하는 메커니즘입니다. 예를 들어, 사용자가 로그인한 상태를 유지하거나 쇼핑몰에서 장바구니에 담은 상품을 추적하는 데 세션이 사용됩니다.

2. 세션 시작 및 관리 방법

JSP에서 세션은 HttpSession 객체를 통해 관리됩니다. 이 객체는 사용자가 웹 애플리케이션에 처음 접근할 때 자동으로 생성되며, 명시적으로 시작하려면 request.getSession() 메서드를 사용합니다.

세션 관리

세션이 생성된 후, HttpSession 객체를 사용하여 세션에 데이터를 저장하거나 세션의 유효성을 검증할 수 있습니다.

3. 세션 데이터 저장 및 불러오기

데이터 저장 (setAttribute)

세션에 데이터를 저장하려면 setAttribute(String name, Object value) 메서드를 사용합니다. 예를 들어, 사용자 이름을 세션에 저장하려면 다음과 같이 작성합니다.

session.setAttribute("username", "BlueShare");

데이터 불러오기 (getAttribute)

세션에 저장된 데이터를 불러오려면 getAttribute(String name) 메서드를 사용합니다. 예를 들어, 세션에서 사용자 이름을 가져오려면 다음과 같이 작성합니다.

String username = (String) session.getAttribute("username");

4. 세션 타임아웃 설정

세션 타임아웃이란?

세션 타임아웃은 사용자가 일정 시간 동안 활동이 없을 때 세션이 자동으로 종료되는 시간을 의미합니다. 이는 보안을 강화하고 서버 자원을 효율적으로 관리하는 데 중요한 역할을 합니다.

타임아웃 설정 방법

세션 타임아웃은 web.xml 파일에서 설정하거나, HttpSession 객체의 setMaxInactiveInterval(int interval) 메서드를 사용해 설정할 수 있습니다.

<session-config>
    <session-timeout>30</session-timeout>  
</session-config>

또는 JSP 코드에서 직접 설정할 수도 있습니다.

session.setMaxInactiveInterval(30 * 60);  

5. 세션 종료

세션 종료 방법

세션을 명시적으로 종료하려면 invalidate() 메서드를 사용합니다. 이 메서드는 세션을 즉시 종료하고, 세션에 저장된 모든 데이터를 삭제합니다. 예를 들어, 사용자가 로그아웃할 때 다음과 같이 세션을 종료할 수 있습니다.

session.invalidate();

6. 예제 코드

세션 데이터 저장 및 불러오기

다음은 사용자의 로그인 상태를 세션에 저장하고, 다른 페이지에서 이를 확인하는 간단한 예제입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>로그인 페이지</title>
</head>
<body>
    <h2>로그인 페이지</h2>
    <%
    	// String username = request.getParameter("username");
    	// 하드코딩된 사용자 이름으로 세션에 저장
        String username = "BlueShare";
        session.setAttribute("username", username);

        // 환영 페이지로 리디렉션
        response.sendRedirect("welcome.jsp");
    %>
</body>
</html>
  • String username = “BlueShare”;: 사용자 이름을 하드코딩하여 “BlueShare”로 설정합니다. 실제 애플리케이션에서는 request.getParameter("username")을 사용하여 폼에서 입력된 사용자 이름을 받아옵니다.
  • session.setAttribute(“username”, username);: 설정된 사용자 이름을 세션에 “username”이라는 이름으로 저장합니다. 이후 다른 페이지에서 이 값을 사용할 수 있습니다.
  • response.sendRedirect(“welcome.jsp”);: 세션에 사용자 이름을 저장한 후, 사용자를 환영 페이지(welcome.jsp)로 리디렉션합니다. 리디렉션은 클라이언트의 브라우저에서 페이지를 자동으로 이동시키는 작업입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>환영 페이지</title>
</head>
<body>
    <h2>환영 페이지</h2>
    <%
        String username = (String) session.getAttribute("username");
        if (username != null) {
            out.println("환영합니다, " + username + "님!");
        } else {
            out.println("로그인 해주세요.");
        }
    %>
</body>
</html>
  • session.getAttribute(“username”): 세션에서 “username”이라는 이름으로 저장된 값을 가져옵니다. 이 값은 이전에 login.jsp에서 저장된 사용자 이름입니다.
  • if (username != null): username 값이 null인지 확인합니다. null이 아니라면 사용자가 로그인된 상태로 간주됩니다.
  • out.println(“환영합니다, ” + username + “님!”); 사용자가 로그인된 상태라면, 환영 메시지를 출력합니다.
  • else: 사용자가 로그인하지 않은 상태라면 “로그인 해주세요.”라는 메시지를 출력합니다.
세션 예제 코드 실행 결과 화면

세션 타임아웃 설정

특정 시간 동안 사용자가 활동하지 않으면 자동으로 로그아웃되는 예제입니다.

<%-- 세션 타임아웃 설정 --%>
<%
    session.setMaxInactiveInterval(10 * 60);  
%>

위 예제에서 사용자가 10분 동안 활동하지 않으면 세션이 종료되어 자동으로 로그아웃됩니다.

이 글을 통해 JSP에서 세션을 관리하는 기본적인 방법을 이해하고, 실습 예제를 통해 세션을 어떻게 활용할 수 있는지 살펴보았습니다.

관련 이전 게시글

위로 스크롤