Session
세션은 쿠키와 마찬가지로, 클라이언트와 서버의 연결을 유지시켜주는 객체다.
그림을 보면, 사용자의 기존 연결 정보를 저장한다는점에서 같다고 할 수 있으나,
사용자의 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()는 세션 정보를 끊는 메서드다.
사용자의 세션 정보는 삭제된다.