Jsp-session & cookie

2 분 소요

세션

  • 세션을 이용한 대표적인 서비스가 ‘장바구니’.
  • HTTP 프로토콜이란 상태가 없는 프로토콜이라고 한다. 클라이언트와 서버간 상태에 대한 보존 없이 매 순간 순간 새로운 연결을 하고 요청에 대한 응답을 서버가 전송하면 연결이 끊기기 때문이다. 이렇게 연결이 끊기면 로그인접속 상태나 담아두었던 장바구니목록 상태가 전부 없어진다.
  • 이를 해결하기 위해 세션을 사용한다. (세션 : 클라이언트와 서버 간의 논리적인 연결)
  • 클라이언트가 서버에게 요청할 때 보내지는 정보에 클라이언트에 대한 정보가 포함이 되어 전달되고 서버는 요청에 실려온 클라이언트의 정보를 알 수 있다. 이 정보가 바로 세션이다.
  • 서버는 클라이언트가 보낸 요청에 함께 존재하는 정보를 가지고 있다가 그 클라이언트로부터 다른 요청이 왔을 때 가지고 있던 정보를 비교해서 동일한 클라이언트인지 비교 판단하게된다.
  • 이건 마치 예전에 봤던 개미에게 꼬리표를 달아서 다음에 발견했을 때 꼬리표번호를 읽어 이전에 봤던 개미라고 인식하는 것과 같은 이치이다.
  • 이렇듯 서버가 자신에게 요청을 보냈던 클라이언트의 정보를 갖고 있는 상태를 세션이라고 한다.

쿠키

  • 쿠키도 상태가 없는 프로토콜을 위해 상태를 지속시키기 위한 방법이다.
  • 세션과의 차이점은 세션은 서버에 클라이언트 정보를 저장한다면 쿠키는 클라이언트 자신에게 그 정보를 저장하게 하는 것이다.
세션 쿠키
서버 측에 저장되는 클라이언트 정보 → 보안에 유리
클라이언트에 ID는 저장한다.
클라이언트 측에 저장되는 클라이언트 정보
자바의 객체를 담을 수 있다. (ENUM으로) 문자열 값만 쿠키 내에 저장할 수 있다.
javax.servlet.http패키지 안의 Cookie 클래스를 이용해서 생성되는 객체 HttpSession 인터페이스를 통해 생성되는 객체
로그인한 상태로 서버에 아무 요청없이 일정 시간이 지나면 세션이 만료되었습니다. 다시 로그인해주세요. 라는 말이 뜨는 것과 같음 → 수강신청 10분 제한시간 이거랑 비슷한 원리 크롬에서 로그인하면 가끔 위에 이 로그인 정보를 기억하시겠습니까? 해서 yes 누르면 다음에 그 사이트 로그인하려고 화면들어가면 아이디 비밀번호가 딱 쳐져있는 상태가 되는게 쿠키의 예시이다.
세션에 담을 수 있는 정보량은 제한이 없다. 하나의 쿠키는 4KB을 넘을 수 없고 클라이언트에 쿠키가 300개를 넘을 수 없다.
  • 결국 http 프로토콜의 상태정보를 지속시키지 못하는 단점때문에 세션과 쿠키가 등장하여 해결해주었다는 얘기이다. 가장 큰 차이는 어디에 존재하는가!

쿠키 클래스 이용하기

  1. 쿠키 생성하기
     Cookie myCookie = new Cookie("쿠키이름", "쿠키값");
    
  2. 생성된 쿠키 설정하기
     myCookie.setValue("새롭게 설정할 쿠키값");
     myCookie.setMaxAge(수명);
     // 수명은 초단위이며 보통 7*24*60*60 처럼 표현한다. -> 7일
    
  3. 설정이 완료된 쿠키 전송
     response.addCookie(myCookie);
    
  4. 요청에 포함된 쿠키들 전부 가져오고 읽기
     Cookie[] cookies = request.getCookies();
     String cookie_name = cookies[i].getName();
     String cookie_value = cookies[i].getValue();
    

세션 내장객체 이용하기

  • 서버가 클라이언트마다 id라는 식별자(꼬리표)를 부여하고 이후 클라이언트가 다시 접속하면 이 id를 통해 구분한다. 이 id를 관리하는 것이 session이다. 여기서 이 id는 클라이언트에 저장되고 나머지 정보들은 서버에 저장되므로 매우 안전하다.
  1. 세션 생성하기
     session.setAttribute("세션이름","세션값");
    
  2. 세션 유지시간 설정하기
     session.setMaxInactiveInterval(5*60); // 5분
    
  3. 세션 속성삭제 / 세션 삭제
     session.removeAttribute("세션이름");
     session.invalidate();
    
  4. 세션 사용 및 출력
      Enumeration en = session.getAttributeNames();
      while (en.hasMoreElements()) {
         String sessionName = (String) en.nextElement();
         String sessionValue = (String) session.getAttribute(sessionName);
      }
    

카테고리:

업데이트:

댓글남기기