서버와 클라이언트간의 정보 저장 목적으로 세션과 쿠키를 많이 사용하는데요. 그중에서 로그인에서 많이 사용하는 JSP session 기능과 예제를 알아보겠습니다.
1. session(세션)이란?
사용자 정보 같은 데이터를 서버나 웹 컨테이너에 저장할 때 사용되는 객체입니다.
주로 로그인 후의 사용자 정보나 장바구니에 물건을 저장 등등의 데이터의 공유가 필요할 때 session(세션)에 저장하여 이를 사용합니다.
즉, 브라우저나 서버가 종료되지 않을 때까지 지정된 데이터를 page 이동 유무에 상관없이 사용할 수 있습니다.
또한 이 세션은 웹 브라우저와 1:1로 매핑되기 때문에 한개의 브라우저에 한개의 세션이 존재하게 됩니다.
2. 쿠키와의 차이점
비슷한 객체로 쿠키가 있는데요. 이 쿠키와 세션의 차이점은 쿠키는 해당 정보를 클라이언트(내 컴퓨터)에 저장하지만 세션은 서버에 저장하게 됩니다.
또한, 쿠키는 클라이언트에 해당 정보를 저장하기 때문에 나 아닌 타인이 쿠키정보를 볼 수 있거나 변경이 가능하기 때문에 보안에 취약한 단점이 있습니다.
3. 예제 소스
구현해볼 프로젝트 SessionLogin의 구조는 다음과 같습니다.
1) JSP
<body> <form action="login" method="post"> 아이디<input type="text" name="id"><br> 비밀번호<input type="password" name="pw"><br> <input type="submit" value="로그인"> </form> </body>
위의 JSP는 사용자로 부터 아이디와 비밀번호를 입력받아 컨트롤러(JAVA)로 전송시킵니다.
2) 컨트롤러
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); String pw = req.getParameter("pw"); //아이디와 패스워드 저장 HttpSession session = req.getSession(); //세션 객체 생성 RequestDispatcher dis = req.getRequestDispatcher("result.jsp"); //페이지 이동 지정 if(id.equals("admin") && pw.equals("1234")){ session.setAttribute("id", id); //아이디가 admin 비밀번호가 1234일 경우 아이디를 세션에 저장 } dis.forward(req, resp); //페이지 포워드 //session.invalidate(); 로그아웃 메소드 }
JSP에서 넘어온 아이디와 비밀번호를 변수에 저장하고 이를 체크하여 세션에 담습니다.
3) 결과 페이지 – JSP
<body> <% if(session.getAttribute("id")==null){ %> 로그인 안됨 <%}else{ %> <form action="logout" method="post"> <input type="submit" name="logout" value="로그아웃"> </form> <%} %> <%= session.getAttribute("id") %> </body>
세션에 id값이 null일 경우 로그인 실패, null이 아닐 경우 id값을 가져옵니다.
4. 결과
로그인 성공시 위와 같이 로그안 버튼과 함께 사용자 아이디가 노출됩니다.
로그인이 실패했을 경우 실패 메시지와 함께 아이디가 null로 표기 됩니다.
JSP session 기능을 보다 다양하게 사용하기 위해서는 API를 참고하시면 되는데요.
session의 생성시간 및 변경등의 기능을 사용할 수 있으니 참고하시기 바랍니다.