JSP&Servlet

Session

kalza 2018. 9. 19. 09:28

세션은 쿠키와 마찬가지로, 클라이언트와 서버의 연결을 유지시켜주는 객체다.






그림을 보면, 사용자의 기존 연결 정보를 저장한다는점에서 같다고 할 수 있으나,

사용자의 PC가 아닌, 서버측에 연결 정보를 저장을 한다는점에 차이가 두고 있다.

이전 포스팅에서도 언급했지만, 쿠키를 사용할 경우 문제 될 수 있는 보안에 취약할 수 있기때문에

최근에는 세션을 많이 사용하기도 한다.

세션 역시도 단점이 존재하는데, 서버에 저장되기 때문에 그만큼 요구되는 서버 공간도 더 커질수 밖에 없고,

부하가 발생할 가능성도 배제 할 수 없다.

클라이언트가 요청을 하면, 웹 서버는 세션 ID를 부여하고, 같은 요청시 구분 수단이 되는 유일한 키가 된다.





1. 로그인 요청을 위한 입력 폼 jsp 파일(login.jsp)을 작성한다.


 login.jsp

 <%@page import="java.util.Enumeration"%>

 <%@ page language="java" contentType="text/html; charset=EUC-KR" 

    pageEncoding="EUC-KR"%>

 <!DOCTYPE html>

 <html>

    <head>

        <meta charset="EUC-KR">

        <title>Insert title here</title>

    </head>

    <body>

<form action="loginCon" method="post">

ID : <input type="text" name="mID"></br>

PW : <input type="password" name="mPW"></br>

<input type="submit" value="로그인">

</form>  

    </body>

 </html>




2. 로그인 요청 처리를 위한 서블릿 파일(LoginCon.java)을 작성한다.


 LoginCon.java

 @WebServlet("/loginCon")

 public class LoginCon extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

String mID = request.getParameter("mID");

String mPW = request.getParameter("mPW");

out.print("mID : " + mID);

out.print("mPW : " + mPW);

HttpSession session = request.getSession();        -- ①

session.setAttribute("memberId", mID);              -- ②

response.sendRedirect("loginOk.jsp");

}

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


doGet(request, response);

}


 } 


① : request객체의 getSession()으로 클라이언트의 session 정보를 담는다.

② : session객체의 setAttribute()로 사용자 아이디 입력값을 매핑하여 session 객체에 담는다.




3. 세션정보가 서버에 존재 할 경우 로그인 과정을 다시 진행하지 않고 페이지로(loginOk.jsp) 이동 할 수 있도록

    jsp파일(login.jsp)을 수정한다. 


 login.jsp

 <%@page import="java.util.Enumeration"%>

 <%@ page language="java" contentType="text/html; charset=EUC-KR" 

   pageEncoding="EUC-KR"%>

 <!DOCTYPE html>

 <html>

    <head>

        <meta charset="EUC-KR">

        <title>Insert title here</title>

    </head>

    <body>

<%

if(session.getAttribute("memberId") != null)

response.sendRedirect("loginOk.jsp");

%>

<form action="loginCon" method="post">

ID : <input type="text" name="mID"></br>

PW : <input type="password" name="mPW"></br>

<input type="submit" value="로그인">

</form>

 

    </body>

 </html>




4. 로그인이 완료되면 넘어갈 페이지(loginOk.jsp)를 만들어 로그아웃 폼을 작성한다.


 loginOk.jsp

 <%@ page language="java" contentType="text/html; charset=EUC-KR" 

   pageEncoding="EUC-KR"%>

 <!DOCTYPE html>

 <html>

    <head>

        <meta charset="EUC-KR">

        <title>Insert title here</title>

    </head>

    <body>


<form action="logoutCon" method="post">

<input type="submit" value="logout">

</form>

    </body>

 </html>




5. 로그아웃 처리를 위한 서블릿 파일(LogoutCon.java)을 작성한다.


 LogoutCon.java

 package com.servlet;


 import java.io.IOException;


 import javax.servlet.ServletException;

 import javax.servlet.annotation.WebServlet;

 import javax.servlet.http.HttpServlet;

 import javax.servlet.http.HttpServletRequest;

 import javax.servlet.http.HttpServletResponse;

 import javax.servlet.http.HttpSession;



 @WebServlet("/logoutCon")

 public class LogoutCon extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


HttpSession session = request.getSession();

session.invalidate();

response.sendRedirect("login.jsp");

}


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

doGet(request, response);

}


 }


session객체의 invalidate()는 세션 정보를 끊는 메서드다.

사용자의 세션 정보는 삭제된다.