JSP + Servlet | 쿠키로 로그인 구현

파과·2022년 7월 14일
0

JSP + Servlet

목록 보기
20/33
post-custom-banner

백견불여일타 267쪽 도전해보세요.

직접 짠 코드

loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="testLogin.jsp">
	<label for="userid">아이디: </label>
	<input type="text" name="id" id="userid"><br>
	
	<label for="userpw">&nbsp;: </label>
	<input type="password" name="pw" id="userpw"><br>
	
	<input type="submit" value="로그인">
</form>
</body>
</html>

testLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//실제로는 DB에서 가져와야 하는 값
	String id = "pinksung";
	String pw = "1234";
	String name = "성윤정";
	
	if(id.equals(request.getParameter("id")) && pw.equals(request.getParameter("pw"))){
		//id, pw 같을 때만 쿠키 생성하고 client에 추가
		//1. cookie 객체 생성(username에 성윤정을 맵핑)
		Cookie c = new Cookie("username", name);
		//2. 속성 부여 
		response.addCookie(new Cookie("id", "pinksung"));
		//3. 클라이언트에 전송
		response.addCookie(c);
%>
	<h2>성공적으로 로그인하셨습니다.</h2>
	<p><a href="main.jsp">들어가기</a>
<%
	}else {
%>
	<h2>로그인에 실패했습니다.</h2>
	<p><a href="loginForm.jsp">되돌아가기</a>
		response.sendRedirect("260_loginForm.jsp");
<%
	}
%>

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	//Cookie에서 name과 value를 얻어와서 비교
	Cookie ck[] = null;
	//1. 클라이언트로부터 Cookie[]를 얻어온
	ck = request.getCookies();
	String name, username;
	if(ck != null){
		for(Cookie c : ck){
			if(c.getName().equals("username")){
				%>
				<%=c.getValue()%>
	님 안녕하세요!<br>
	저희 홈페이지에 방문해 주셔서 감사합니다. <br>
	즐거운 시간 되세요....
	<form method="post" action="logout.jsp">
		<input type="submit" value="로그아웃">
	</form>
<%
			}
		}
	}else {
%>
	<h2>로그인에 실패했습니다.</h2>
	<p> <a href="loginForm.jsp">되돌아가기</a>
	<%
			}
	%>
</body>
</html>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	//전체 쿠키 얻어와 배열에 저장
	Cookie[] cookies = request.getCookies() ;
	if(cookies != null){
		for(int i=0; i < cookies.length; i++){
			//쿠키를 하나씩 꺼내와 유효기간을 만료시킴
			cookies[i].setMaxAge(0) ;
			//클라이언트에 해당 쿠키 정보를 전송 (response 객체 헤더에 추가)
			response.addCookie(cookies[i]);
		}
	}
%>
<script>
	alert("로그아웃되었습니다.");
	location.href="loginForm.jsp";
</script>
</body>
</html>

책 정답 코드

출처 🔗 로드북 홈페이지 - 백견불여일타

testLogin.jsp

<body>
<%
	String id="pinksung";
	String pwd="1234";
	String name="성윤정";

	if(id.equals(request.getParameter("id"))&&
		pwd.equals(request.getParameter("pwd"))){
		
	Cookie c = new Cookie("username",URLEncoder.encode(name,"UTF-8"));
	c.setMaxAge(365*24*60*60);
	response.addCookie(c);
%>
	<h2>성공적으로 로그인하셨습니다.</h2>
	<p><a href="main.jsp">들어가기</a>
<%}else{ %>
	<h2>로그인에 실패했습니다.</h2>
	<p><a href="loginForm.jsp">돌아가기</a>
<%} %>
</body>

main.jsp

<body>
<%
Cookie []ck = request.getCookies();
String str= null;
if(ck != null){
	for(Cookie c : ck)
		{
			str = URLDecoder.decode(c.getValue(),"UTF-8");
		}
	out.print(str);	
%>
	님 안녕하세요!<br>
	저희 홈페이지에 방문해 주셔서 감사합니다.<br>
	즐거운 시간되세요...<br>
	<form method="post" action="logout.jsp">
		<input type="submit" value="로그아웃">
	</form>
<%} else { %>
	<h2>로그인에 실패했습니다.</h2>
	<p><a href="loginForm.jsp">돌아가기</a>
<%} %>
</body>

logout.jsp

<body>
<%
	Cookie cookie = new Cookie("username","");
	cookie.setMaxAge(0);
	response.addCookie(cookie);
%>
<script>
	alert("로그 아웃 되었습니다.");
	location.href="loginForm.jsp";
</script>
</body>
post-custom-banner

0개의 댓글