세션(2) : 세션을 사용한 로그인 상태 유지

de_sj_awa·2021년 5월 21일
2

1. 세션을 사용한 로그인 상태 유지

세션을 사용해서 로그인을 처리하는 방식은 쿠키를 사용한 방식과 비슷하다.

  1. 로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.
  2. 이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.
  3. 로그아웃할 경우 session.invalidate() 메서드를 호출하여 세션을 종료한다.

2. 인증된 사용자 정보 session 기본 객체에 저장하기

세션을 사용해서 로그인 상태를 유지하려면 session 기본 객체의 속성에 로그인 성공 정보를 저장하면 된다. 예를 들면 아래 코드와 같이 session 기본 객체의 특정 속성을 로그인 상태 정보로 사용하면 된다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String id = request.getParameter("id");
    String password = request.getParameter("password");

    if(id.equals(password)){
        session.setAttribute("MEMBERID", id);
%>
<html>
<head>
    <title>로그인 성공</title>
</head>
<body>

로그인에 성공했습니다.

</body>
</html>
<%
    }else { // 로그인 실패 시
%>
<script>
    alert("로그인에 실패하였습니다.")
    history.go(-1);
</script>
<%
    }
%>

sessionLogin.jsp는 id 요청 파라미터와 password 요청 파라미터가 같으면 로그인에 성공한 것으로 간주하고, session 기본 객체의 "MEMBERID" 속성에 아이디 정보를 저장한다. 즉, "MEMBERID" 속성이 존재하면 현재 사용자는 로그인한 사용자로 간주한다. 이 코드는 단순히 세션을 이용한 로그인 처리 방식을 보여주기 위한 예제로, 실제 로그인 처리 코드는 이보다 더 복잡하다.

sessionLogin.jsp에 아이디와 암호를 전송하는 폼을 보여주는 JSP 코드는 아래 예제 코드와 같다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>로그인폼</title>
</head>
<body>

<form actio="<%=request.getContextPath()%>/chap10/member/sessionLogin.jsp" method="post">
아이디 <input type="text" name="id" size="10">
암호 <input type="password" name="password" size="10">
<input type="submit" value="로그인">
</form>

</body>
</html>

3. 인증 여부 판단

session 기본 객체에 로그인 상태를 위한 속성의 존재 여부에 따라 로그인 상태를 판단할 수 있다. 예를 들어, 위의 sessionLogin.jsp은 로그인에 성공하면 MEMBERID 속성에 로그인 상태 정보를 보관하므로, 아래 예제 코드와 같이 session 기본 객체의 "MEMBERID" 속성을 사용해서 로그인 여부를 판단하면 된다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String memberId = (String)session.getAttribute("MEMBERID");
    boolean login = memberId == null ? false : true;
%>
<html>
<head>
    <title>로그인 여부 검사</title>
</head>
<body>

<%
    if(login){
%>
아이디 "<%=memberId%>"로 로그인 한 상태
<%
    }else{
%>
로그인하지 않은 상태
<%
    }
%>
</body>
</html>

4. 로그아웃 처리

로그아웃을 처리할 때에는 아래와 같이 session.invalidate() 메서드를 사용하여 세션을 종료하면 된다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    session.invalidate();
%>
<html>
<head>
    <title>로그아웃</title>
</head>
<body>

로그아웃하였습니다.

</body>
</html>

session.invalidate() 메서드를 호출하지 않고, 다음과 같이 로그인 상태를 보관할 때 사용한 session 기본 객체를 모두 삭제해도 로그아웃한 효과를 낼 수 있다.

session.removeAttributes("MEMBERID");

하지만, 로그인할 때 session 기본 객체에 추가하는 속성이 늘어나면 로그아웃 코드도 함께 변경해야 하므로, session.invalidate() 메서드를 사용하는 것이 좋다.

참고

  • 최범균의 JSP2.3 웹 프로그래밍
profile
이것저것 관심많은 개발자.

0개의 댓글