본문 바로가기

기능 학습/쇼핑몰 구현

[쇼핑몰 구현] 6. Session을 이용한 로그인 로그아웃 구현

목록


목차

구성

로그인 페이지

 

 

#1 . 아이디 비밀번호 전달

	//아이디 입력 체크
	if(!loginF.userid.value){
		alert('아이디를 입력하세요')
		loginF.userid.focus();
		return false;
	
	//비밀번호 입력 체크
	}else if(!loginF.pwd.value){
		alert('비밀번호를 입력하세요')
		loginF.pwd.focus();
		return false;
	}
	return true;

입력 여부 유효성 검사

 

	<tr>
		<th>아이디</th>
		<td>
		<input type="text" name="userid"
		class="form-control" autofocus="autofocus"
		placeholder="ID">
		</td>
	</tr>
	
	<tr>
		<th>비밀번호</th>
		<td>
		<input type="password" name="pwd" 
		class="form-control"
		placeholder="Password">
		</td>
	</tr>

유효성 검사 실시 후 아이디, 비밀번호 값 전달

 

 

#2 . 회원 정보 유효성 검사 및 호출

	String id = request.getParameter("userid");
	String pwd = request.getParameter("pwd");

로그인 페이지에서 입력한 아이디와 비밀번호값 받아오기

 

	if(id==null || pwd==null || "".equals(id.trim())||"".equals(pwd.trim())){
		response.sendRedirect("login.jsp");
		return;
	}

유효성 체크

 

        //--사용자 정의 Exception
        public class NotUserException extends Exception {

            public NotUserException() {
                super("NotUserException");
            }
            public NotUserException(String msg) {
                super(msg);
            }

        }

사용자 정의 Exception 생성

 

	//--로그인 체크
	public UserVO loginCheck(String id, String pwd) 
	throws SQLException,NotUserException
	{
		UserVO user = this.selectUserById(id);
		if(user==null) {
			//아이디가 존재하지 않을 경우 ==> 예외 발생
			throw new NotUserException(id+"란 아이디는 존재하지 않아요");
		}
		
		//비밀번호 체크
		String dbPwd=user.getPwd();
		if(!pwd.equals(dbPwd)) {
        
			//비밀번호가 불일치라면
			throw new NotUserException("비밀번호가 일치하지 않아요");
		}
		
		//회원이 맞다면
		return user;//해당 회원 반환
		
		
	}

아이디 비밀번호 존재 여부 체크 후 아이디가 존재하지 않을 경우와 비밀번호가 일치하지 않을 경우 예외를 발생 시키고

모두 통과한 회원 정보 전달

 

	UserVO loginUser = userDao.loginCheck(id, pwd);

유효성 검사를 모두 통과한 회원 정보 호출

 

 

#3 . Session을 이용한 회원 전용 페이지 설정

	//회원 정보 저장
	session.setAttribute("loginUser", loginUser);

Session에 회원 정보 저장

 

	UserVO member=(UserVO) session.getAttribute("loginUser");

세션에 저장된 회원 정보 호출

 

	if(member==null){
		%>
		<script>
			alert('로그인해야 이용할 수 있어요');
			location.href = "<%=request.getContextPath()%>/login/login.jsp";
		</script>
		<%
		return;
	}

로그인 여부 체크

 

	//정지회원일 경우
	if(member.getMstate()==1){
		%>
		<script>
			alert('정지 회원입니다. 일반회원으로 전환해야 이용 가능합니다.
			회원정보를 수정한 뒤 다시 로그인 하세요')
            
			location.href = "<%=request.getContextPath()%>/member/edit.jsp?idx=
			<%=member.getIdx()%>&mode=<%=member.getMstate()%>";
		</script>
		<%
		return;
	}

일반회원, 정지회원, 탈퇴회원 여부를 체크해 정지 회원일 경우 회원정보를 수정 페이지로 이동

 

	<%@ include file="/login/loginCheckModule.jsp" %>

회원 전용 페이지에 해당 페이지를 include

 

#4 . Session을 이용한 관리자 전용 페이지 설정

	UserVO member=(UserVO) session.getAttribute("loginUser");

세션에 저장된 회원 정보 호출

 

	if(member==null){
		%>
		<script>
			alert('로그인해야 이용할 수 있어요');
			location.href = "<%=request.getContextPath()%>/login/login.jsp";
		</script>
		<%

로그인 여부 체크

 

	if(!member.getUserid().equals("admin")){
		%>
		<script>
			alert('관리자만 이용할 수 있어요');
			history.back();
		</script>
		<%
		return;
	}

회원의 아이디가 "admin" 이 아닐 경우 접근 불가 설정

 

	//관리자 계정이 정지 되었을 경우
	if(member.getMstate()==1){
		%>
		<script>
			alert('정지된 관리자입니다. 일반회원으로 전환해야 이용 가능합니다. 
			회원정보를 수정한 뒤 다시 로그인 하세요')
            
			location.href = "<%=request.getContextPath()%>/member/edit.jsp?idx=
			<%=member.getIdx()%>&mode=<%=member.getMstate()%>";
		</script>
		<%
		return;
	}

일반회원, 정지회원, 탈퇴회원 여부를 체크해 정지 관리자의 계정일 경우 회원 정보 수정 페이지로 이동

 

	<%@ include file="/login/adminCheckModule.jsp" %>

회원 목록, 회원 검색, 회원 삭제 페이지에 include 하여 관리자 계정만 회원을 조회, 검색, 삭제 할 수 있도록 설정

 

 

#5 . 로그인 정보 출력

로그인 후 창

 

 

	UserVO loginUser = (UserVO) session.getAttribute("loginUser");

Session에 저장된 회원 정보 호출

 

	boolean isLogin =(loginUser==null)? false: true;

로그인 시 true값 반환

 

	if(isLogin){
		<li class="nav-item bg-primary">
		<a class="nav-link text-white" href="#"><%=loginUser.getUserid() %>님 로그인 중...</a>
		</li>
        
		//로그아웃 버튼 추가
		<li class="nav-item">
		<a class="nav-link" href="<%=myctx%>/login/logout.jsp">Logout</a>
		</li>
		}

로그인 하여 true값을 받았을 경우 회원 정보의 아이디 출력 후 로그아웃 버튼 추가

 

 

#6 . Cookie를 이용한 아이디 저장

아이디 저장 기능 추가 창

 

 

	String saveId = request.getParameter("saveId");

아이디 저장 CheckBox 체크 유무 값 호출

 

	Cookie ck = new Cookie("uid",loginUser.getUserid());

로그인한 회원의 아이디를 저장

 

	if(saveId!=null){//체크했다면

		ck.setMaxAge(7*24*60*60);

	}else{//체크하지 않았다면
		ck.setMaxAge(0);

	}

체크 시 7일간 쿠키의 값이 유효하도록 설정

미 체크 시 쿠키 삭제

 

	ck.setPath("/");

어디서든 쿠키를 꺼내올 수 있도록 설정

 

	response.addCookie(ck);

쿠키를 클라이언트 쪽에 밀어 넣기

 

	response.sendRedirect("../index.jsp");

초기 페이지로 이동

 

	Cookie[] cks = request.getCookies();

	if(cks!=null){
		for(Cookie ck : cks){
        
		String key = ck.getName();//쿠키의 키값을 반환
        
		if(key.equals("uid")){
        
			flag=true;
			uid=ck.getValue();//사용자 아이디
			break;
            
			}
		}
	}

 

	<input type="text" name="userid" value="<%=uid %>"

쿠키를 꺼내 사용자 아이디가 저장되어 있으면 아이디 입력 폼에 출력

 

	<input type="checkbox" <%=(flag)?"checked":"" %> name="saveId" id="saveId">
		아이디 저장
	</input>

쿠키를 꺼내 사용자 아이디가 저장되어 있으면 boolean 타입 flag = true

 

flag가 true일 경우 아이디 저장 CheckBox 를 check 설정

 

 

#7 . 탈퇴회원 로그인 막기

	create or replace view member_view
	as
	select * from member where mstate>-1;

회원의 회원상태(mstate) 값이 1 또는 0인 회원의 정보만 호출하는 view 생성

 

일반회원(1), 정지회원(0), 탈퇴회원(-1)

 

 

	//--아이디로 회원 정보 검색
	public UserVO selectUserById(String id) throws SQLException {
		
		try {
			con=DBUtil.getCon();
			String sql="select * from member_view where userid=?";
			ps=con.prepareStatement(sql);
			ps.setString(1, id);
			rs=ps.executeQuery();
			List<UserVO> arr=this.makeList(rs);
			
			if(arr!=null && arr.size()==1) {
				UserVO user = arr.get(0);
				return user;
			}
			return null;
			
		} finally {
			close();
		}
		
	}

회원 정보를 검색할 때 해당 view를 사용해 일반회원과 정지회원만 검색

 

 

#8 . 로그아웃

	session.invalidate();
	response.sendRedirect("../index.jsp");

로그아웃 클릭 시 세션에 저장된 모든 변수를 제거 후 초기 페이지로 이동