Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP 세션 유지·관리 방법, HttpSession 예제로 배우기

JSP에서 로그인 상태나 장바구니처럼 사용자별 정보를 여러 페이지에 걸쳐 유지하려면 HttpSession 객체를 활용하는 것이 가장 일반적인 방법입니다. 이번 예제에서는 HttpSession을 사용해 세션의 생성 시간(creation time)마지막 접속 시간(last accessed time)을 조회하고, 요청에 기존 세션이 없으면 새로운 세션을 생성해 연결하는 전체 과정을 다룹니다.

세션 추적 예제 코드

아래 코드는 세션 생성 시간 확인, 마지막 접속 시간 확인, 신규 방문자 판별, 방문 횟수 카운팅까지 한 번에 처리하는 완전한 JSP 페이지입니다.

<%@ page import = "java.io.*,java.util.*" %>
<%
    // 세션 생성 시간을 가져옵니다.
    Date createTime = new Date(session.getCreationTime());
    // 이 페이지에 마지막으로 접속한 시간을 가져옵니다.
    Date lastAccessTime = new Date(session.getLastAccessedTime());
    String title = "Welcome Back to my website";
    Integer visitCount = new Integer(0);
    String visitCountKey = new String("visitCount");
    String userIDKey = new String("userID");
    String userID = new String("ABCD");
    // 신규 방문자인지 확인합니다.
    if (session.isNew()) {
        title = "Welcome to my website";
        session.setAttribute(userIDKey, userID);
        session.setAttribute(visitCountKey, visitCount);
    }
    visitCount = (Integer)session.getAttribute(visitCountKey);
    visitCount = visitCount + 1;
    userID = (String)session.getAttribute(userIDKey);
    session.setAttribute(visitCountKey, visitCount);
%>

<html>
    <head>
        <title>Session Tracking</title>
    </head>
    <body>
        <center>
            <h1>Session Tracking</h1>
        </center>
        <table border = "1" align = "center">
            <tr bgcolor = "#949494">
                <th>세션 정보</th>
                <th>값</th>
            </tr>
            <tr>
                <td>id</td>
                <td><% out.print(session.getId()); %></td>
            </tr>
            <tr>
                <td>생성 시간</td>
                <td><% out.print(createTime); %></td>
            </tr>
            <tr>
                <td>마지막 접속 시간</td>
                <td><% out.print(lastAccessTime); %></td>
            </tr>
            <tr>
                <td>사용자 ID</td>
                <td><% out.print(userID); %></td>
            </tr>
            <tr>
                <td>방문 횟수</td>
                <td><% out.print(visitCount); %></td>
            </tr>
        </table>
    </body>
</html>

실행 방법

위 코드를 main.jsp라는 이름으로 저장한 뒤, 웹 브라우저에서 https://localhost:8080/main.jsp에 접속하면 됩니다. 처음 접속하면 "Welcome to my website"라는 제목과 함께 아래와 같은 세션 정보 테이블이 출력됩니다.

실행 결과

세션 정보
id0AE3EC93FF44E3C525B4351B77ABB2D5
생성 시간Tue Jun 08 17:26:40 GMT+04:00 2010
마지막 접속 시간Tue Jun 08 17:26:40 GMT+04:00 2010
사용자 IDABCD
방문 횟수1

같은 브라우저에서 페이지를 새로고침하면 세션이 그대로 유지되므로 방문 횟수가 1씩 증가하고, 제목도 "Welcome Back to my website"로 바뀌는 것을 확인할 수 있습니다. 반면 브라우저를 완전히 종료했다가 다시 접속하면 새로운 세션 ID가 발급됩니다.

주요 메서드 정리

  • getCreationTime() : 세션이 생성된 시각을 밀리초 단위로 반환합니다.
  • getLastAccessedTime() : 클라이언트가 이 세션으로 마지막 요청을 보낸 시각을 반환합니다.
  • isNew() : 서버가 새로 생성했지만 아직 클라이언트가 인지하지 못한 세션인지 판별합니다.
  • setAttribute() / getAttribute() : 세션 범위에 데이터를 저장하고 다시 읽어올 때 사용합니다.
  • getId() : 서버가 자동으로 부여한 고유한 세션 ID를 반환합니다.

이처럼 HttpSession을 사용하면 개발자가 직접 쿠키를 다루지 않아도 컨테이너가 세션 ID를 알아서 관리해 주기 때문에, 사용자별 상태 추적 기능을 손쉽고 안정적으로 구현할 수 있습니다.