본문 바로가기

국비

01.18 국비학원 75일차 (쿠키(Cookie), 세션(Session))

  • 쿠키와 세션

쿠키(Cookie)

      - 웹 페이지들 사이의 공유 정보를 클라이언트 PC에 저장해 놓고 사용하는 방법으로 활용하는 것

      - 클라이언트에 저장된 정보이기 때문에 보안에 취약

      - 클라이언트 브라우저에서 사용 유무를 설정 가능

      - 도메인당, 경로당 쿠키가 만들어진다

         (현재 프로젝트 상에선 /localhost:8080/web01/ 하위에 있으면 따로 요청하지 않아도 쿠키 정보가 전달됨)

      - ex. 로그인 할 때 '아이디 저장하기' 에 활용

Cookie cookie = new Cookie("name", "value"); // (쿠키명, 쿠키값)
cookie.setMaxAge(60 * 60 * 24);  //쿠키 유효시간 설정(초단위)
resp.addCookie(cookie); //쿠키 담기

로그인서블릿의 doGet에서 쿠키 가져와 set 하기
쿠키 생성은 사용자가 작성한 데이터를 저장하려 할 때 필요한 것이니 doPost에서 작성. 여기선 "remember" 라고 속성명 지정
아이디기억하기 체크하고 로그인 했을 때는 쿠키 저장 시간 설정해서 resp 객체에 전달하고 체크 안했을 땐 유효시간 0 으로 하여 만료된 시간을 전달
반복문으로 쿠키 값들을 request 객체에 저장하여 ${requestScope.remember}로 가져올 필요 없이 ${cookie.remember.value} 로 간단히 사용가능

세션(Session)

      - 웹 페이지들 사이의 공유 정보를 서버의 메모리에 저장해 놓고 사용하는 방법을 활용하는 것

      - 서버에 정보가 저장되기 때문에 쿠키보다는 보안에 유리

      - 서버에 부하를 준다

      - 세션ID(고유값)는 브라우저에 저장된다(브라우저에서 서버에 세션ID를 보내면 그에 해당하는 메모리를 찾아 전달)

      - 개발자모드(F12) - application - cookies 에서 도메인 주소와 세션ID 확인 가능

      - ex. 로그인 정보, 장바구니 에 활용

HttpSession session = req.getSession(); //세션이 없는 경우에도 자동으로 새로 생성 후 반환해줌. 단 false를 설정한 경우엔 세션 없으면 null 반환
session.getAttribute("세션명"); 
session.setAttribute("세션명", 객체);
session.removeAttribute("세션명");  //세션에 저장된 데이터 삭제
session.invalidate();  //세션 자체를 삭제

로그인서블릿 doPost 에서 로그인에 성공했을 때 세션 생성하여 세션 데이터 설정. 여기서 설정한 "login"정보와 "user" 정보는 웹페이지들 간에 공유된다.
로그인서블릿 doGet에서 세션에 저장된 "login"을 활용하여 로그인창을 요청하여도 이미 로그인 한 상태면 다시 로그인 창에 들어가지 못하게 함