1. 쿠키와 세션의 차이

출처 : https://cyberchimps.com/blog/session-cookies/

 

출처 : https://twitter.com/sahnlam/status/1759829449284231214

 

쿠키와 세션 응답 헤더

 

  📌  쿠키를 사용했을 때는 아이디와 비밀번호가 노출됨  ▶️  보안이 되지 않음


2.  쿠키  Cookie

html 파일

 

<body>
    <form action="cookie01_process.jsp" method="post">
          <p>아 이 디 : <input type="text" name="id"></p>
          <p>비밀번호 : <input type="text" name="passwd"></p>
          <p><input type="submit" value="전송"></p>
    </form>
</body>

 

jsp 파일

 

    📍 쿠키 생성하기
         1) 전송된 아이디와 비밀번호가 일치하면, 쿠키 이름 userId, userPw에 값을 설정하도록 Cookie 객체를 생성

<body>

    <%
      String userId = request.getParameter("id");
      String userPw = request.getParameter("passwd");

      if (userId.equals("admin") && userPw.equals("1234")) { // 로그인 정보가 맞으면
        Cookie cookieId = new Cookie("userId", userId); // 쿠키 생성. Cookie 클래스를 이용해서 쿠키 객체 생성.
        Cookie cookiePw = new Cookie("userPw", userPw);
        response.addCookie(cookieId); // response 할 때 쿠키도 같이 보낼 것
        response.addCookie(cookiePw);

        out.println("쿠키 생성이 성공했습니다<br>");
        out.println(userId + "님 환영합니다");
      } else {
        out.println("쿠키 생성이 실패했습니다");
      }
    %>

</body>

 

    📍 쿠키 객체에 저장된 모든 쿠키 값 가져와 출력
        1) 쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메서드 작성
        2) 얻어온 쿠키 정보의 개수를 출력하도록 Cookie 객체의 length를 작성
        3) 얻어온 쿠키 정보에서 쿠키 이름과 값을 하나씩 출력하도록 Cookie 객체의 getName(), getValue() 메소드 작성

<body>

    <%
      boolean isLogin = false;
      String userId = "";
      Cookie[] cookies = request.getCookies(); // request에서 쿠키를 얻어옴.
      out.println("현재 설정된 쿠키의 개수 => " + cookies.length + "<br>");
      out.println("====================================<br>");
      for (int i = 0; i < cookies.length; i++) {
        out.println("설정된 쿠키의 속성 이름 [ " + i + " ] : " + cookies[i].getName() + "<br>");
        out.println("설정된 쿠키의 속성 값 [ " + i + " ] : " + cookies[i].getValue() + "<br>");
        out.println("--------------------------------------------<br>");

        if (cookies[i].getName().equals("userId") && cookies[i].getValue() != null) {
          // userId라는 쿠키이름이 있고 value가 null이 아니면 로그인 한 것으로 간주
          isLogin = true;
          userId = cookies[i].getValue();
        }
      }

      if (isLogin) {
        out.print(userId + "님이 로그인 중입니다.");
      } else {
        out.print("로그인 상태가 아닙니다.");
      }
    %>

</body>


    📍 쿠키 객체에 저장된 모든 쿠키 삭제하기
        1) 쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메소드 작성
        2) 얻어온 모든 쿠키를 삭제하도록 Cookie 객체의 setMaxAge() 메소드에 유효 기간을 0으로 설정
        3) 웹 페이지 cookie02.jsp로 이동하도록 response 내장 객체의 sendRedirect() 메소드를 작성

<body>
    
    <%
        Cookie[] cookies = request.getCookies();

        for (int i = 0; i < cookies.length; i++) {
            cookies[i].setMaxAge(0);
            response.addCookie(cookies[i]);
        }
        response.sendRedirect("04.jsp");
    %>

</body>


3.  세션  Session

html 파일
<body>
    <form action="session01_process.jsp" method="post">
      <p> 아이디 : <input type="text" name="id"></p>
      <p> 비밀번호 : <input type="text" name="passwd"></p>
      <p><input type="submit" value="전송"></p>
    </form>
</body>

 

jsp 파일

 

     📍  세션 설정하기
         1)  전송된 아이디 비번이 일치하면 세션 속성 이름이 userID, userPW에 값을 설정하도록 session 내장 객체의 setAttribute() 메소드 작성
        2) 일치하지 않으면 실패 메시지를 출력

 

      💫  쿠키와는 다르게 response 객체에 세션을 담는 과정은 없음 ▶️ 서버에 저장하기 때문

<body>
    <%
      String userId = request.getParameter("id");
      String userPw = request.getParameter("passwd");

      if (userId.equals("admin") && userPw.equals("1234")) {
        session.setAttribute("userId", userId);
        session.setAttribute("userPw", userPw);
        out.println("세션 설정이 성공했습니다<br>");
        out.println(userId + "님 환영합니다");
      } else {
        out.println("세션 설정이 실패했습니다");
      }
    %>
</body>

 

    📍 세션에 저장된 속성 값 가져와 출력
        - 세션에 저장된 세션 속성 이름 userID, userPW의 속성 값을 가져오도록 session 내장 객체의 getAttribute() 메소드를 작성

<body>
    <%
        String userId = (String) session.getAttribute("userId"); // 세션의 속성값은 Object라서 다운캐스팅을 해야함.
        String userPw = (String) session.getAttribute("userPw");

        out.println("설정된 세션의 속성 값 [1] : " + userId + "<br>");
        out.println("설정된 세션의 속성 값 [2] : " + userPw);
    %>
</body>

    

    📍  세션에 저장된 세션 속성 삭제
       -  세션에 저장된 세션 속성 이름  userID를 삭제하도록 session 내장 객체의 removeAttribute() 메서드를 작성

<body>
    <p><h4>------ 세션을 삭제하기 전 ------</h4></p>
    <%
        String userId = (String) session.getAttribute("userId");
        String userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");

        session.removeAttribute("userId");
        session.removeAttribute("userPw");
    %>
    
    <p><h4>------ 세션을 삭제한 후 ------</h4></p>
    <%
        userId = (String) session.getAttribute("userId");
        userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");
    %>
</body>

    📍 세션에 저장된 모든 세션 속성 삭제
        1) 요청에 포함된 클라이언트의 세션이 유효하면 유효한 메시지를 출력하고, 그렇지 않으면 유효하지 않은 메시지를 출력
        2) 세션에 저장된 모든 세션 속성을 삭제하도록 session 내장 객체의 invalidate() 메서드를 작성

 

     👾  request.isRequestSessionIdValue() : request에 포함된 SessionId가 유효한지 검사. 반환형은 boolean

<body>
    <p><h4>------ 세션을 삭제하기 전 ------</h4></p>
    <%
        String userId = (String) session.getAttribute("userId");
        String userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");

        if (request.isRequestedSessionIdValid() == true) {
          out.print("세션이 유효합니다.");
        } else {
          out.print("세션이 유효하지 않습니다.");
        }

        session.invalidate();
     %>
     
    <p><h4>------ 세션을 삭제한 후 ------</h4></p>
    <%
      if (request.isRequestedSessionIdValid() == true) {
        out.print("세션이 유효합니다.");
      } else {
        out.print("세션이 유효하지 않습니다.");
      }
    %>
</body>

    

    📍 세션 아이디와 웹 사이트에서 유지한 시간 출력


        1) 고유한 세션 내장 객체의 아이디를 가져오도록 session 내장 객체의 getId() 메서드를 작성
        2) 세션에 마지막으로 접근한 시간을 가져오도록 session 내장 객체의 getLastAccessedTime() 메서드를 작성
        3) 세션이 생성된 시간을 가져오도록 session 내장 객체의 getCreationTime() 메서드를 작성
        4) 웹 사이트에 머문 시간을 계산하도록 작성

<body>
    <%
      String sessinId = session.getId();
      // 세션에 마지막으로 접근한 시간
      long lastTime = session.getLastAccessedTime();  // 단위가 1/1,000초
      // 세션이 생성된 시간
      long startTime = session.getCreationTime();  // 단위가 1/1,000초

      long usedTime = (lastTime - startTime) / 1000;

      out.println("세션 아이디 : " + sessinId + "<br>");
      out.println("요청 시작 시간  : " + startTime + "<br>");
      out.println("요청 마지막 시간  : " +  lastTime + "<br>");
      out.println("웹 사이트에서 경과 시간  : " + usedTime + "초<br>");
    %>
</body>

    📍 세션 유효 시간을 가져와 출력


        1) 세션에 설정된 유효 시간을 가져오도록 session 내장 객체의 getMaxInactiveInterval() 메서드를 작성하고, 유효시간을 출력
        2) 세션 유효 시간을 60 * 60 초로 설정하도록 session 내장 객체의 setMaxInactiveInterval() 메서드를 작성
        3) 세션에 설정된 유효 시간을 가져오도록 session 내장 객체의 getMaxInactiveInterval() 메서드를 작성하고, 유효시간을 출력

<body>
    <p><h4>------ 세션 유효시간 변경 전 ------</h4></p>
    <%
        int time = session.getMaxInactiveInterval() / 60;

        out.println("세션 유효 시간 : " + time + "분<br>");
    %>
    <p><h4>------ 세션 유효시간 변경 후 ------</h4></p>
    <%
        session.setMaxInactiveInterval(60 * 60);
        time = session.getMaxInactiveInterval() / 60;

        out.println("세션 유효 시간 : " + time + "분<br>");
    %>
</body>

 

 

 

 

 

 

 

 

 

[ 내용 참고 : IT학원 강의 ]

+ Recent posts