본문 바로가기

프로그래밍

Session, Cookie 특징 및 차이점

http 프로토콜

  1. client 가 server에 요청
  2. server는 요청에 대한 처리를 한 후 client에 응답
  3. 응답 후 연결 해제
 Stateless
  • 지속적인 연결로 인한 자원낭비를 해결하기 위해 연결 해제
  • client와 server가 연결상태를 유지해야 하는 경우 문제 발생 ⇒ cookie, session 사용

Cookie 특징

  • 서버에서 사용자의 컴퓨터에 저장하는 정보파일
  • 사용자가 별도 요청 하지 않아도 브라우저는 request시 Request Header를 넣어 자동으로 서버에 전송
  • key - value, String 형태
  • Browser마다 저장되는 쿠키는 다름
  • 이름(unique), 값, 만료일, 경로 정보로 구성
  • 클라이언트에 총 300개의 크키, 하나의 도메인 당 20개의 쿠키
  • 하나의 쿠키는 4KB까지 저장 가능

Cookie 사용 목적

  • 세션 관리
  • 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줌
  • 트래킹 : 사용자의 행동과 패턴을 분석하고 기록

Cookie 구성 요소

  • 이름 : 고유한 이름, 각 쿠키 구별
  • 값 : 쿠키의 이름과 매핑 ⇒ 공백 사용할 경우, UrlEncoder 사용
  • 유효기간
    • 양수 : 해당 기간 까지
    • 음수 : session cookie, browser 닫으면 삭제
    • 0 : 삭제 효과 (유효기간=0 이므로)
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로 (저장되는 경로)

Cookie 동작 순서

  1. client가 페이지 요청
  2. WAS는 쿠키 생성
  3. HTTP header에 쿠키 넣어 응답
  4. Browser는 넘겨받은 쿠키를 PC에 저장하고, 다시 WAS가 요청할 때, 요청과 함께 쿠키 전송
  5. Browser가 종료되어도 쿠키 만료기간이 남아있다면, 클라는 계속 보관
  6. 동일 사이트 재 방문시, 클라 PC에 해당 쿠키가 있을 경우, 요청페이지와 함께 쿠키 전송

Session 개념

  • 방문자가 웹 서버에 접속해 있는 상태
  • WAS 메모리에 Object 형태로 저장
  • 메모리가 허용하는 용량까지 제한없이 저장 가능

Session 동작 순서

  • 클라이언트가 페이지 요청
  • 서버는 접근한 클라이언트의 cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
  • session-id가 존재하지 않는다면(처음 온 사용자), 서버는 session-id 생성해 클라에게 전달
  • 서버에서 클라한테 준 session-id를 쿠키를 사용해 서버에 저장 (쿠키 이름 : JSESSIONID)
  • 클라는 재접속시, JSESSIONID를 이용해 session-id 값을 서버에 전달

Session 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보 저장
  • 웹 서버에 저장되는 쿠키 (=세션 쿠키)
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제 되므로 쿠키보다 보안이 좋음
  • 저장 데이터에 제한 x
  • 각 클라이언트에 고유 Session id 부여
  • Session id 로 클라이언트 구분하여 요구에 맞는 서비스 제공
  • 마지막 접근 시간 + 세션 시간 (계속 업데이트)

Session vs Cookie

  • interface
  • Server memory에 Object로 저장
  • Object로 저장
  • 용량 제한 x
  • 만료 시점 : 알 수 없음
  • class
  • client 컴퓨터에 file로 저장
  • file에 저장되므로 String 형태
  • 도메인당 20개, 1쿠키 당 4kb
  • 만료 시점 : 쿠키 저장 시 설정 (없을 경우 browser 종료 시 만료)

💡 공통점

  • 전역에 저장하기 때문에, projcet 내의 모든 JSP에서 사용 가능
  • Map 형식을 관리하기 때문에, key 값 중복 허용 x

웹 공간 영역 소멸 시기

page(다른 page로 가면 끝) > request(response 받으면 끝), 남발해도 괜찮, 받으면 바로 사라지기 때문 > session(browser 종료시, session invalidate), 개별 사용자라 생각, 남발 x > application(context 사라지면 종료 → tomcat restart할 경우임), 모든 사용자

⇒ 데이터 저장은 request, session에 주로 함!

Recent Posts
Popular Posts