본문 바로가기
Project/OPOT_SPRING

06. 개발 : 로그인 하기 (세션, 쿠키, 로그인 후 이전 페이지로 이동)

by 개발개발빈이 2022. 7. 26.

○ 로그인 후 기존 페이지로 이동

 

    방법1) javascript:history.go() 이용

        - history.go(이동할 페이지 수) → history.go(-2) : 2페이지 이전으로 이동

        - 문제점 : 로그인 시 네이게이션 바의 '로그인'이 '마이페이지'로 변경되어야 하는데,

                        history(-2)는 기존 페이지의 세션정보도 그대로 가지고 있기 때문에

                        새로고침 하지 않으면 네이게이션 바가 그대로 '로그인'인 상태로 페이지가 넘어감

@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {

  //일부 코드 생략 (아래 전체코드 참고)

  msg+="<script>";
  msg+="    alert('로그인 되었습니다');";
  msg+="    location.href='javascript:history.go(-2);'";
  msg+="</script>";
  
  mav.addObject("msg", msg);
  mav.setViewName("m_manage/msgView");

  return mav;
}

 

    방법2) document.referrer 이용

        ① 뷰단 : login.jsp → 로그인 페이지로 넘어오기 전 페이지 정보를 'id=referrer'에 가져가기

<form name="loginfrm" id="loginfrm" method="post" 
      action="<%=request.getContextPath()%>/login.do" onsubmit="return">
  <input type="hidden" name="referrer" id="referrer">
</form>

<script>
    var referrer= document.referrer;
    $('#referrer').attr('value', referrer);
</script>

        ② 컨트롤러

@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {

  //일부 코드 생략 (아래 전체코드 참고)
  
  String referrer=req.getParameter("referrer");
  
  msg+="<script>";
  msg+="    alert('로그인 되었습니다');";
  msg+="    location.href='"+referrer+"';";
  msg+="</script>";
  
  mav.addObject("msg", msg);
  mav.setViewName("m_manage/msgView");

  return mav;
}

 


 ○ 전체코드 : DAO/DTO

    ① MemberDTO.java

package kr.co.opot.member;

public class MemberDTO {

    private String mem_id;
    private String mem_pw;
    private String mem_phone;
    private String mem_email;
    private String mem_lv;
    private String mem_reg;
    private String mem_birth;
    private String new_pw;
    
    public MemberDTO() {}
    
    //Getters Setters 생략    
    
}//class end

    ② MemberDAO.java : loginRead()

public String loginRead(String mem_id, String mem_pw) {
    String mem_lv=null;
    try {
        con=dbopen.getConnection();//DB연결

        sql=new StringBuilder();
        sql.append(" SELECT mem_lv ");
        sql.append(" FROM member_info ");
        sql.append(" WHERE mem_id=? AND mem_pw=? ");
        sql.append(" AND mem_lv IN ('A', 'B') ");

        pstmt = con.prepareStatement(sql.toString());
        pstmt.setString(1, mem_id);
        pstmt.setString(2, mem_pw);
        rs = pstmt.executeQuery();

        if(rs.next()) {
            mem_lv=rs.getString("mem_lv");
        }//if end

    } catch (Exception e) {
        System.out.println("로그인 실패: " + e);
    }finally{
        DBclose.close(con, pstmt, rs);;
    }//try end
    return mem_lv;
}//loginRead() end

 

전체코드 : 뷰단

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>    
<%@ include file="../header.jsp"%>
<!-- 본문시작 login.jsp -->

<div class="container text-center">
  <div class="pagetitle">
    <br>
    <span><img src="/images/person_icon.png" alt="person" width="50px"></span>
	<span><strong> LOGIN </strong></span>
	<br>
  </div>

  <c:set var="s_mem_id" value="${ s_mem_id }"></c:set>
  <c:set var="s_mem_pw" value="${ s_mem_pw }"></c:set>
  <c:set var="s_mem_lv" value="${ s_mem_lv }"></c:set>

  <c:choose>
    <c:when test="${ s_mem_id==null || s_mem_pw==null || s_mem_lv==null }">			
    <!-- 게스트일 때, 로그인 폼 출력 -->
      <form name="loginfrm" id="loginfrm" method="post" 
            action="<%=request.getContextPath()%>/login.do" onsubmit="return">
        <input type="hidden" name="referrer" id="referrer">
        <table class="table table-bordered" id="login_table" style="width:500px; margin:auto;">
        <tr>
          <td>
            <input type="text" name="id" id="id" class="form-control" 
                   placeholder="아이디" maxlength="10" value="${ c_id }" required>
          </td>	
          <td rowspan="2" width="90px">
            <input type="image" src="../images/login_btn_bk.png" width="85px">		   
          </td>
        </tr>
        <tr>
          <td>
            <input type="password" name="passwd" id="passwd" class="form-control" 
                   placeholder="비밀번호" maxlength="10" required>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <c:choose>
              <c:when test="${ c_id=='' }"><c:set var="check"></c:set></c:when>
              <c:otherwise><c:set var="check">checked</c:set></c:otherwise>
            </c:choose>
            <label><input type="checkbox" name="c_id" value="SAVE" ${ check } >아이디 저장</label>	  
            &nbsp;&nbsp;&nbsp;
            <a href="<%=request.getContextPath()%>/agreement.do">회원가입</a>
            &nbsp;&nbsp;&nbsp;
            <a href="find_info.do">아이디/비밀번호찾기</a>
          </td>
        </tr>		  
        </table>
      </form>		
    </c:when>
	
    <c:otherwise>
    <!-- 로그인 상태일 때, 로그아웃 버튼 출력 -->
      <form name="logoutfrm" id="logoutfrm" method="post" action="logout.do">
        <strong>${ s_mem_id }</strong> 님
        <br>
        <input type="submit" value="로그아웃">
        <br><br>
        <a href='member_info.do'>[회원정보수정]</a>
        &nbsp;&nbsp;
        <a href='member_retire.do'>[회원탈퇴]</a>
        <br><br>
      </form>
    </c:otherwise>
	
  </c:choose>

  <script>
    var referrer= document.referrer;
    $('#referrer').attr('value', referrer);		
  </script>	
</div>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>

 

전체코드 : 컨트롤러

@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public ModelAndView login(HttpServletRequest req) {

    ModelAndView mav =new ModelAndView();

    Cookie[] cookies=req.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();
            }
        }
    }

    mav.addObject("c_id", c_id);
    mav.setViewName("m_manage/login");

    return mav;
}


@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
    ModelAndView mav =new ModelAndView();
    HttpSession session = req.getSession();

    String mem_id=req.getParameter("id").trim();
    String mem_pw=req.getParameter("passwd").trim();
    String referrer=req.getParameter("referrer");

    String mem_lv=null;
    mem_lv=dao.loginRead(mem_id, mem_pw);

    String msg="";

    if(mem_lv==null) {

        msg+="<script>";
        msg+="    alert('로그인 실패\\n아이디와 비밀번호를 확인해주세요');";
        msg+="    location.href='javascript:history.back();'";
        msg+="</script>";			

    }else {

        session.setAttribute("s_mem_id", mem_id);
        session.setAttribute("s_mem_pw", mem_pw);
        session.setAttribute("s_mem_lv", mem_lv);			

        String c_id=Utility.checkNull(req.getParameter("c_id"));	
        Cookie cookie=null;
        if(c_id.equals("SAVE")){//아이디 저장에 체크를 했다면

            //쿠키변수선언 new Cookie("변수명", 값)
            cookie=new Cookie("c_id", mem_id);

            //쿠키의 생존기간 1개월
            cookie.setMaxAge(60*60*24*30);	//각 브라우저 쿠키 삭제의 영향을 받는다

        }else{
            cookie=new Cookie("c_id", "");
            cookie.setMaxAge(0);
        }//if end

        resp.addCookie(cookie);	//요청한 사용자 PC에 쿠키값을 저장				

        msg+="<script>";
        msg+="    alert('로그인 되었습니다');";
        msg+="    location.href='"+referrer+"';";
        msg+="</script>";

    }
    mav.addObject("msg", msg);
    mav.setViewName("m_manage/msgView");

    return mav;
}

 


○ 프로젝트 전체 보기

https://github.com/jaebin0817/SOLDESK_FinalProject

 

GitHub - jaebin0817/SOLDESK_FinalProject

Contribute to jaebin0817/SOLDESK_FinalProject development by creating an account on GitHub.

github.com

http://opot.cafe24.com/home.do

 

OPOT

   #어드벤처   #사랑스러운   #한획을 그은   #속도감있는   #스릴러   #예능   #애니메이션   #휴먼   볼까말까 고민된다면⁉ 오늘 이거 볼까요? 👀 범죄도시2 ★★★☆☆ 3.2 종이의 집

opot.cafe24.com

 

댓글