세션 저장/조회/삭제 흐름

moon.kick·2025년 4월 15일

좋아요! 올려주신 두 개의 서블릿(LoginCheckServlet.java, LogoutServlet.java)은 현재 구조도 없이 막 복붙된 상태라 컴파일도 되지 않고 실행도 안 될 상태예요. 이걸 세션 저장/조회/삭제 흐름이 잘 작동하도록 다음과 같이 정리하고 설명도 달아드릴게요.


✅ 목표

  • 로그인 시 사용자 정보(userId, userName, 로그인 시간)를 세션에 저장
  • 로그인 성공 시 LoginOK.jsp로 리디렉트
  • 로그인 실패 시 alert() 띄우고 뒤로 가기
  • 로그아웃 시 세션 종료 + 메인페이지 리디렉트

✨ 고친 코드 ①: LoginCheckServlet.java

package auth.servlet;

import java.io.IOException;
import java.util.Date;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

public class LoginCheckServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 1. 사용자 입력값 받기
        String userId = request.getParameter("userId");
        String userPwd = request.getParameter("userPwd");
        String userName = request.getParameter("userName");

        // 2. (예시) DB에서 가져온 계정 정보라고 가정
        String dbId = "jang";
        String dbPwd = "1234";

        // 3. 로그인 성공 여부 확인
        if (dbId.equals(userId) && dbPwd.equals(userPwd)) {
            // 3-1. 세션 생성 및 정보 저장
            HttpSession session = request.getSession();
            session.setAttribute("userId", userId);
            session.setAttribute("userName", userName); // name도 저장
            session.setAttribute("loginTime", new Date()); // 로그인 시간 저장

            // 3-2. 성공 시 리디렉트 방식 이동 (새 request/response)
            response.sendRedirect("LoginOK.jsp");

        } else {
            // 4. 로그인 실패 시 alert 띄우고 뒤로가기
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().println("<script>");
            response.getWriter().println("alert('아이디나 비밀번호가 틀렸습니다');");
            response.getWriter().println("history.back();");
            response.getWriter().println("</script>");
        }
    }
}

✨ 고친 코드 ②: LogoutServlet.java

package auth.servlet;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

public class LogoutServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        // 세션 무효화 (접속 기록 삭제)
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }

        // 로그아웃 후 메인페이지 또는 로그인 페이지로 이동
        response.sendRedirect("LoginForm.jsp");
    }
}

✅ 그리고 LoginOK.jsp 예시

로그인 성공 후 정보를 확인할 페이지에서 다음처럼 출력할 수 있어요:

<%@ page import="java.util.Date" %>
<%@ page session="true" %>
<%
    String userId = (String) session.getAttribute("userId");
    String userName = (String) session.getAttribute("userName");
    Date loginTime = (Date) session.getAttribute("loginTime");
%>

<h2>로그인 완료!</h2>
<p>아이디: <%= userId %></p>
<p>이름: <%= userName %></p>
<p>로그인 시간: <%= loginTime %></p>

<a href="LogoutServlet">로그아웃</a>

필요하시면 로그인 상태 확인 필터나 세션 유지 시간 타이머도 추가해드릴 수 있어요!
👉 어떤 흐름으로 확장하고 싶은지 말해줘요~

profile
@mgkick

0개의 댓글