IT EDU

Cookie vs Session

yoonhoou 2022. 3. 7.
728x90

 

Cookie Session
- 클라이언트(브라우저)의 메모리 또는 파일에 저장

- 클라이언트 로컬에 저장되어 보안에 취약
- 특히 파일로 저장되는 경우 탈취, 변조될 위험이 있고 Request/Response에서 스나이핑당할 위험이 있어 보안이 비교적 취약

- 지속 쿠키의 경우 브라우저 종료시에도 저장되어 있을 수 있음

- 쿠키에 정보가 있기 때문에 서버에 요청시 헤더를 바로 참조하면 되므로 속도에서 유리함

- 서버 메모리에 저장

- 클라이언트 정보 자체는 서버에 저장되어있으므로 비교적 안전

- 서버에서 만료시간/날짜를 정해서 지워버릴 수 있기도하고 세션 쿠키에 세션 아이디를 정한 경우, 브라우저 종료시 세션아이디가 날아갈 수 있다.

- 제공받은 세션ID(key)를 이용해서 서버에서 다시 데이터를 참조해야하므로 속도가 비교적 느림


 

 

🍪 Cookie

  • 웹서버와 브라우저는 애플리케이션을 사용하는 동안 필요한 값을 쿠키를 통해 공유하여 상태를 유지
  • 사용자를 구분할 수 있는 방법이 필요하기 때문에 쿠키를 이용함
    • HTTP는 비연결지향: 요청, 응답 과정이 끝나면 연결이 끊기기 때문에 사용자 확인이 어려움
  • 쿠키 생성후, 요청 URL 날릴 때마다 URL(요청)에 해당하는 저장한 쿠키를 브라우저가 갖고 있다면 요청정보와 함께 쿠키를 서버로 보냄
    • 사용자가 접속해서 들어옴 -> 서버가 사용자 이름을 기억하고싶음
    • 서버 says "hey 브라우저야 사용자 이름 좀 저장해줘"
    • 브라우저 says "ok 이름 쿠키에 저장할게"
    • 브라우저가 사용자 이름을 쿠키에 저장함
    • 브라우저 says "나 #@(F#%B)라는게 필요해~ 이거 하는데 필요한 쿠키 정보도 같이 보내줄게"
    • 서버 says "근데 네가 누구야 아 쿠키 보내줬구나 까서 볼게~ 아하 저번에 온 사용자 A로군~"

 

구성요소

  • 이름
  • 유효시간(초)
  • 도메인
    • ex) www.somehost.com, .somehost.com
    • 보안 때문에쿠키의 도메인이 쿠키를 생성한 도메인을 벗어나면 브라우저는 쿠키를 저장(생성) 하지 않는다.
    • 설정 안 하면 톰캣 서버 기본정보

 

동작 방식

  • 쿠키 생성 단계
    • 생성한 쿠키를 응답 데이터의 헤더에 저장하여 웹브라우저에 전송
    • 예시
      • 1) 사용자가 request 날림
      • 2) 서버가 response 하는 시점에 setCookieHeader라는 걸 통해서 response
      • 3) 브라우저가 그 응답 header를 보고 '아 쿠키를 만들어야 하구나' 하고 쿠키를 만듦
  • 쿠키 저장 단계
    • 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관
    • 쿠키 종류에 따라 메모리나 파일에 저장
  • 쿠키 전송 단계
    • 웹브라우저는 저장한 쿠키를 요청이 있을 때마다 웹서버에 전송(삭제되기 전까지)
    • 사용자가 웹서버에 요청할 때마다, 요청한 url에 맞는 저장된 유효한 쿠키가 있는지부터 확인해서 그 쿠키를 요청 시에 함께 던짐
      • ex) 책갈피 기능, 5페이지까지 읽었네 쿠키에 저장 나중에 오면 5페이지부터 펴져서 읽을 수 있음
    • 웹서버는 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행

 

쿠키 설정

1. 쿠키 객체 생성

  • Cookie cookie = new Cookie("key값", "value값");
  • 사용 불가 문자: 공백, =,"/?@:;
  • 쿠키값은 사용불가 문자를 제외한 나머지 아스키 문자 사용 가능
  • 이외의 값(ex: 한글)을 사용 시에는 URL Encoder.encode()를 사용하여 인코딩 처리를 해준다.

2. 쿠키 최대 지속시간 설정

  • cookie.setMaxAge(60*60*24)
    • 24시간
  • 초단위
  • 지정하지 않으면 브라우저를 종료할 때 쿠키를 함께 삭제한다

3. 응답 헤더에 쿠키 객체를 추가

  • response.addCookie(cookie);
  • 응답 헤더를 통해서 브라우저에 전달하기 때문에 출력 버퍼가 플러시 된 이후에는 쿠키를 추가할 수 없다

 

 

Session

  • Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user.
  • 쿠키처럼 사라지지 않고 서버에 데이터를 저장
    • 장: 쿠키를 사용할 때보다 보안이 향상된다.
    • 단: 서버의 자원을 사용하기 때문에 속도 저하도 올 수 있음
  • 세션은 세션 ID를 이용해 사용자(웹브라우저) 별로 구분하여 정보를 관리할 수 있다.
    • 세션 객체에 접근하기 위해서는 session id가 필요
    • session id를 key값으로 필요한 정보를 꺼내올 수 있음
    • 로그인 시(= 사용자 요청 시) 사용자 별로 필요한 정보 저장 (ex 세션이 만료되었습니다. 재 로그인해주세요 할 때 보는 그 세션)
  • 세션을 이용하지 않으면 상태 값이 저장되지 않음
    • 새로고침 할 때마다 새로운 사람으로 인식

 

세션 생성 방법

  • HttpSession session = request.getSession(boolean값);
    • true: 세션 객체가 존재하지 않으면 새로 생성한다 (안 넣어도 true)
    • false: 세션 객체가 존재하지 않으면 null을 리턴한다 (세션 유무 확인 시 쓰임)

 

세션 삭제 방법

  • invalidate() 메서드 호출
  • setMaxInactiveInterval(int interval) 메서드 호출
    • 일정 시간(초) 동안 요청이 없으면 세션 객체 삭제됨
  • web.xml에 <session-config> 설정하기 (분단위로 설정함.)

'IT EDU' 카테고리의 다른 글

[WAS] Was 개념 정리  (0) 2022.03.29
[Java] 자바 정규 표현식 (Pattern, Matcher)  (2) 2022.03.18

댓글