Cookie & HttpSession

mingggkeee·2022년 3월 24일
0
post-custom-banner
  • Http 프로토콜의 특징
    • Client가 Server에 요청
    • Server는 요청에 대한 처리를 한 후 Client에 응답
    • 응답 후 연결을 해제를 해야함.(지속적인 연결로 인한 자원낭비를 줄이기 위해서)
      • 그러나 연결상태를 유지해야 하는 경우도 있기 때문에 문제가 발생한다.(로그인 등..)
      • 따라서 Client단위로 상태 정보를 유지해야하는 경우 Cookie와 Session이 사용되는 것.
      • Http 프로토콜의 특징(약점)을 보완하기 위해 사용된다.

  • Cookie : javax.servlet.http.Cookie

    • 서버에서 사용자의 컴퓨터에 저장하는 정보파일
    • 사용자가 별도의 요청을 하지 않아도 브라우저는 request시 Request Header에 넣어 자동으로 서버에 전송
    • Key와 Value로 구성되고 String 형태를 가지고 있다.
    • Browser마다 저장되는 쿠키는 다르다. (서버에서는 브라우저가 다르면 다른 유저로 인식하기 때문)
  • 사용목적

    • 세션관리 : 사용자 아이디, 접속시간, 장바구니 등의 서버가 알아야할 정보를 저장
    • 개인화 : 사용자마다 다르게 그 사람에게 적절한 페이지를 보여줄 수 있다.
    • 트래킹 : 사용자의 행동과 패턴을 분석하고 기록하는 것이 가능
  • 사용예시

    • ID 저장(자동 로그인)
    • 일주일간 이 창을 다시 보지 않기
    • 최근 검색한 상품들을 광고에 추천하기
    • 쇼핑몰의 장바구니 기능
  • 쿠키의 구성요소

    • 이름 : 여러 개의 쿠키가 Client의 컴퓨터에 저장되기 때문에 쿠키 식별자
    • 값 : 쿠키의 이름과 매핑되는 값
    • 유효기간 : 쿠키의 유효기간
    • 도메인 : 쿠키를 전송할 도메인
    • 경로(path) : 쿠키를 전송할 요청 경로
  • 쿠키의 동작 순서

    • Client가 페이지를 요청
    • WAS는 Cookie를 생성
    • Http Header에 Cookie를 넣어 응답
    • Browser는 넘겨받은 Cookie를 PC에 저장하고, WAS가 요청시 요청과 함께 Cookie전송
    • Browser가 종료되어도 Cookie의 유효기간이 남아 있다면 계속 보존
    • 동일 사이트를 재방문시 Client의 PC에 해당 쿠키가 남아있는 경우 요청페이지와 함께 Cookie 전송
  • 쿠키의 특징

    • 이름, 값, 유효기간, 경로 정보로 구성
    • Client에 총 300개의 쿠키 저장 가능
    • 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
    • 하나의 쿠키는 4KB(4996byte)까지 저장이 가능
  • 쿠키의 주요 기능

    • 생성 : Cookie cookie = new Cookie(String name, String value)
    • 값 변경/얻기 : cookie.setValue(String value) / String value = cookie.getValue()
    • 사용 도메인의 지정 및 얻기 : cookie.setDomain(String domain) / String domain = cookie.getDomain()
    • 값 범위 지정 및 얻기 : cookie.setPath(String path) / String path = cookie.getPath()
    • 유효기간 지정 및 얻기 : cookie.setMaxAge(int expire) / int expire = cookie.getMaxAge();
    • 쿠키 삭제 : cookie.setMaxAge(0)
    • 생성된 쿠키를 client에 전송 : response.addCookie(cookie)
    • client에 저장되어 있는 쿠키 얻기 : Cookie[] cookies = request.getCookies()
  • 쿠키 사용 시 주의 사항

    • Key는 영문, 숫자로 구성되며 콤마, 세미콜론, 공백 포함이 불가, $시작 불가
    • Value는 한글이 사용 가능한데 URLEncoder.encode()를 통해 인코딩하여 사용 가능

HttpSession

  • Session : javax.servlet.http.HttpSession

    • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보는데 그것을 세션이라 지칭
    • WAS의 메모리에 Object의 형태로 저장된다.
    • 메모리가 허용하는 용량까지 저장이 가능
  • 사용 예시

    • Site내에서 화면을 이동해도 로그인상태가 풀리지 않고 유지
    • 장바구니
  • 세션의 동작 순서

    • Client가 페이지 요청
    • 서버는 접근한 Client의 RequestHeader 필드인 쿠키를 확인하고, Client가 해당 Session-id를 보냈는지 확인
    • Session-id가 존재하지 않는경우 서버는 Session-id를 생성해서 Client에 반환
    • 서버에서 Client로 반환된 Session-id를 쿠키를 사용해 서버에 저장
    • Client는 재 접속 시에 저장된 쿠키를 이용하여 Session-id값을 서버에 전달
  • 세션의 특징

    • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
    • 웹 서버에 저장되는 쿠키
    • 브라우저를 닫거나, 서버에서 세션을 삭제 했을 때만 삭제가 되므로, 쿠키보다 보안성이 좋음
    • 저장 데이터에 제한이 X
    • 각 Client 고유 Session-ID가 부여됨
    • Session-ID로 Client를 구분하여 각 Client요구에 맞는 서비스 제공 가능
  • 세션의 주요 기능

    • 생성 : HttpSession session = request.getSession()
    • 값 저장 : session.setAttribute(String name, Object value)
    • 값 얻기 : Object obj = session.getAttribute(String name)
    • 값 제거 : session.removeAttribute(String name) --> 특정 이름의 속성 제거하기 session.invalidate() --> binding되어 있는 모든 속성 제거
    • 생성시간 : long ct = session.getCreationTime()
    • 마지막 접근 시간 : long lat = session.getLastAccessedTime()
SessionCookie
Typejavax.servlet.http.HttpSession(Interface)javax.servlet.http.Cookie(Class)
저장 위치Server의 memory에 Object로 저장Client 컴퓨터에 file로 저장
저장 형식Object는 모두 가능(Dto, List등)file에 저장되기 때문에 String의 형태
사용 예로그인 시 사용자 정보, 장바구니 등최근 본 상품 목록, 아이디저장 등
용량제한제한 없음도메인 당 20개, 1쿠키 당 4KB
만료시점Client가 로그아웃하거나, 일정시간동안 세션에 접근 X쿠키 저장시 설정(디폴트는 브라우저 종료시 만료)
profile
만반잘부
post-custom-banner

0개의 댓글