웹개발 교육/jsp

[57일] jsp (29) - myweb 프로젝트(로그인 시 id 저장)

ewok 2022. 10. 18. 13:05

id저장을 체크했을 때 id를 불러와 아이디 입력 칸에 표시해주는 것은 사용자의 pc에 저장된 것을 가져오는 것이다. 이를 쿠키라고 한다.

 

Cookie 클래스

  • javax.servlet.http.Cookie 클래스를 이용한다.
  • Tomcat 서버가 Client에 저장하는 텍스트 파일로 된 정보이다.
  • 보안성이 없음으로 계정과 패스워드를 동시에 쿠키에 저장하면, 쿠키의 내용을 전부 편집기로 열어 볼 수 있음으로 보안에 문제가 될 수 있다.

 

 

아이디가 저장되는 시점은 일반적으로 로그인을 성공했을 때 일 것이다.

 

loginForm.jsp

c_id 값을 가져왔을 때 save가 있으면 아이디를 저장한다.

 

loginProc.jsp

<%@page import="javax.swing.event.MouseInputListener"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp"%>
<!-- 본문 시작 loginProc.jsp-->
<h3>* 로 그 인 결 과 *</h3>
<%
	String id = request.getParameter("id").trim();
	String passwd = request.getParameter("passwd").trim();
	dto.setId(id);
	dto.setPasswd(passwd);
	
	String mlevel = dao.loginProc(dto);
	if(mlevel==null) {
		out.println("<p>아이디/비밀번호 다시 한번 확인해주세요!!</p>");
		out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>");
	} else {
		//로그인 성공
		//out.print("로그인 성공~~");
		//out.print("회원등급:" + mlevel);
		
		//다른 페이지에서 로그인 상태 정보를 공유할 수 있도록
		session.setAttribute("s_id", id);
		session.setAttribute("s_passwd", passwd);
		session.setAttribute("s_mlevel", mlevel);
		
		//쿠키시작----------------------------------------
		//->웹서버가 사용자PC에 저장하는 텍스트 파일로 된 정보
	    //->각 브라우저의 쿠키삭제의 영향을 받는다
	    //->보안에 취약하다
	    //->예)아이디저장, 오늘창그만보기, 클락한상품목록
		//->예)오늘창그만보기는 자바스크립트 쿠키. 참조)https://www.w3schools.com/js/js_cookies.asp
		
		//<label><input type="checkbox" name="c_id" value="SAVE">아이디 저장
		String c_id = Utility.checkNull(request.getParameter("c_id"));
		Cookie cookie = null;
		if(c_id.equals("SAVE")){ //아이디저장에 체크를 했다면
			//쿠키변수선언 new Cookie("변수명", 값)
			cookie = new Cookie("c_id", id);
			//쿠키의 생존기간 1개월
			cookie.setMaxAge(60*60*24*30); //각 브라우저의 쿠키 삭제의 영향을 받는다
		} else {
			cookie = new Cookie("c_id", "");
			cookie.setMaxAge(0);
		}//if end

		response.addCookie(cookie); //요청한 사용자 PC에 쿠키값을 저장
		//쿠키 끝-----------------------------------------
		
		//첫페이지 이동
		//http://localhost:9090/myweb/index.jsp
		String root = Utility.getRoot(); //myweb반환
		response.sendRedirect(root+"/index.jsp");
	}//if end

%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp"%>

 

쿠키에 저장된 id를 아이디 창에 보여줘야 한다. 이때 사용자의 PC에 저장된 모든 쿠키를 가져와서 원하는 값을 찾아 출력해주는 것이다.

 

loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="auth.jsp"%>
<%@ include file="../header.jsp"%>
<!-- 본문 시작 loginForm.jsp-->
<h3>* 로 그 인 *</h3>

<%if(s_id.equals("guest") || s_passwd.equals("guest") || s_mlevel.equals("guest")) {
	//아이디 저장 쿠키 확인---------------------------------
	Cookie[] cookies = request.getCookies(); //사용자 PC에 저장된 모든 쿠키값 가져오기
	String c_id="";
	if(cookies!=null){ //쿠키가 존재하는지?
		for(int i=0; i<cookies.length; i++){ //모든 쿠키값을 검색
			Cookie cookie = cookies[i]; //쿠키 하나씩 가져오기
			if(cookie.getName().equals("c_id")==true){
				c_id = cookie.getValue();
			}//if end
		}//for end
	}//if end
	//------------------------------------------------
%>
<form name="loginfrm" id="loginfrm" action="loginProc.jsp" onsubmit="return loginCheck()"><!-- myscript.js -->
	<table class="table">
		<tr>
		    <td>
			   <input type="text" name="id" id="id" value="<%=c_id%>" placeholder="아이디" maxlength="10" required>
		    </td>
		    <td rowspan="2">
			   <!-- type=image는 기본 속성이 submit -->
			   <input type="image" src="../images/bt_login.gif">		   
		    </td>
		</tr>
		<tr>
		   <td>
		      <input type="password" name="passwd" id="passwd" placeholder="비밀번호" maxlength="10" required>
		   </td>
		</tr>
		<tr>
		   <td colspan="2">
		      <label><input type="checkbox" name="c_id" value="SAVE" <%if(!c_id.isEmpty()){out.print("checked");}%>>아이디 저장</label>			  
			  &nbsp;&nbsp;&nbsp;
			  <a href="agreement.jsp">회원가입</a>
			  &nbsp;&nbsp;&nbsp;
			  <a href="findID.jsp">아이디/비밀번호찾기</a>
		   </td>
		</tr>		  
	</table>
</form>

<%
} else {
	//로그인 성공했다면
	out.println("<strong>" + s_id + "</strong> 님");
	out.println("<a href='logout.jsp'>[로그아웃]</a>");
	out.println("<br><br>");
	out.println("<a href='memberModify.jsp'>[회원정보수정]</a>");
	out.println("&nbsp;&nbsp;");
	out.println("<a href='memberWithdraw.jsp'>[회원탈퇴]</a>");
}//if end
%>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>

아이디 저장에 체크를 했다면, 다시 로그인 화면에 왔을 때 아이디도 출력되고 아이디 저장 체크박스에 체크도 된 상태로 보이도록 했다.

 

아이디 저장 했을 경우

 

아이디 저장 안했을 경우