Jsp

[jsp 내장 객체] session 개념, 로그인 성공 시 아이디 저장 예제

쟈근꿈틀이 2022. 5. 12. 12:37
728x90

session의 주요 메서드

메서드 기능
setAttribute(String 속성 이름,
Object 속성 값)
세션에 속성 데이터를 저장
getAttribute(String 속성 이름) 속성 이름을 통해 세션의 속성 데이터(Object)를 반환
removeAttribute(String 속성 이름) 속성 이름을 통해 세션의 속성 데이터(Object)를 삭제
invaliate() 현재 invalidate()라는 메서드를 호출한 프로그램의 세션에
저장된 모든 속성 데이터를 삭제
setMaxInactiveInterval(int 초) 세션의 유효 시간을 설정(기본 값: 1800초[30분])
getMaxInactiveInterval() 세션의 유효 시간을 반환

 


아이디 기억하기 버튼을 누르고 로그인 성공시
아이디를 input태그에 출력

login.jsp
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
<style>
	#errorMsg { color: red; font-weight: bold; } 
</style>
<script>
	function check(){
		id = document.getElementById('id');
		pw = document.getElementById('pw');
		if(id.value == ""){
			alert('아이디는 필수 항목입니다.');
			id.focus();
			return false;
		}else if(pw.value == ""){
			alert('비밀번호는 필수 항목입니다.');
			pw.focus();
			return false;
		}else{
			return true;
		}
	}
</script>
<%
		String uId = (String)session.getAttribute("uId");
		if(uId == null) 
			uId = "";
		String errorMsg = (String)request.getAttribute("errorMsg");
		if(errorMsg == null) 
			errorMsg = "";
%>
</head>
<body>
	<form action="loginChk.jsp" method="post" onSubmit="return check()" id="f">
		아이디: <input type="text" id="id" name="id" value="<%=uId %>" placeholder="아이디"><br>
		패스워드: <input type="password" id="pw" name="pw" placeholder="패스워드"><br>
		<%if(uId == ""){%>
			<input type="checkbox" name="rememberId" value="true">아이디 기억하기<br>
		<%} else {%>
			<input type="checkbox" name="rememberId" value="true" checked="checked">아이디 기억하기<br>
		<%} %>
		<input type="submit" value="로그인"> 
		<input type="reset" value="취소"> <br>
		<p><span id="errorMsg"><%=errorMsg %></span></p>
	</form>
</body>
</html>

input type="submit"인 버튼이 눌릴 때마다 check()라는 함수를 호출하여 반환 값을 받는다.

check()가 true가 반환될 때(아이디와 비밀번호가 모두 입력됐을 때)만 form태그 내부의 데이터들을 loginChk.jsp로 전달하도록 하였다. 

 

웹 서버에 의해 login.jsp가 실행될 때 session의 getAttribute()라는 함수를 통해 아이디 속성 데이터를 반환받고,

이 값이 null이 아니라면 유저의 아이디를 id의 input태그에 출력한다.

에러 메시지의 로직도 이와 동일하다.

 

loginChk.jsp
<%
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String rememberId = request.getParameter("rememberId");
		
		if(id == "" || pw == ""){
			session.removeAttribute("uId");
			request.setAttribute("errorMsg", "아이디와 비밀번호는 필수 값입니다!");
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}else if(!id.equals("admin") || !pw.equals("1234")){
			session.removeAttribute("uId");
			request.setAttribute("errorMsg", "아이디나 비밀번호가 일치하지 않습니다!");
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}else if(rememberId != null && rememberId.equals("true")){
			session.setAttribute("uId", id);
		}else{
			session.removeAttribute("uId");
		}
		response.sendRedirect("login.jsp");
%>

 

또, 사용자가 아이디를 기억이라는 checkbox를 클릭하고 로그인에 성공했다면 session의 setAttribute()를 통해 사용자의 아이디를 세션에 저장한다. 이 아이디는 사용자가 웹 브라우저를 종료하지 않는 이상 30분간 유지된다.

저장한 후 login.jsp로 이동한다.

 

아이디나 비밀번호가 공백, 로그인에 실패, 아이디 기억 체크박스를 해제하고 로그인에 성공했을 경우, 세션의 removeAttribute()를 통해 아이디 속성 데이터를 삭제한다.

 

 

 

 

 

728x90