JSP session 로그인 예제


서버와 클라이언트간의 정보 저장 목적으로 세션과 쿠키를 많이 사용하는데요. 그중에서 로그인에서 많이 사용하는 JSP session 기능과 예제를 알아보겠습니다.

1. session(세션)이란?

사용자 정보 같은 데이터를 서버나 웹 컨테이너에 저장할 때 사용되는 객체입니다.

주로 로그인 후의 사용자 정보나 장바구니에 물건을 저장 등등의 데이터의 공유가 필요할 때 session(세션)에 저장하여 이를 사용합니다.

즉, 브라우저나 서버가 종료되지 않을 때까지 지정된 데이터를 page 이동 유무에 상관없이 사용할 수 있습니다.

또한 이 세션은 웹 브라우저와 1:1로 매핑되기 때문에 한개의 브라우저에 한개의 세션이 존재하게 됩니다.

jsp-session

2. 쿠키와의 차이점

비슷한 객체로 쿠키가 있는데요. 이 쿠키와 세션의 차이점은 쿠키는 해당 정보를 클라이언트(내 컴퓨터)에 저장하지만 세션은 서버에 저장하게 됩니다.

또한, 쿠키는 클라이언트에 해당 정보를 저장하기 때문에 나 아닌 타인이 쿠키정보를 볼 수 있거나 변경이 가능하기 때문에 보안에 취약한 단점이 있습니다.

3. 예제 소스
jsp-session2

구현해볼 프로젝트 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. 결과

jsp-session3

로그인 성공시 위와 같이 로그안 버튼과 함께 사용자 아이디가 노출됩니다.

jsp-session4

로그인이 실패했을 경우 실패 메시지와 함께 아이디가 null로 표기 됩니다.

JSP session 기능을 보다 다양하게 사용하기 위해서는 API를 참고하시면 되는데요.

session의 생성시간 및 변경등의 기능을 사용할 수 있으니 참고하시기 바랍니다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.