Cookie & Session

yimo22·2023년 4월 2일
0

WEB

목록 보기
3/8

HTTP protocol

HTTP Protocol의 특징

  • Stateless
    • 지속적인 연결로 인한 자원낭비를 줄이기 위해 연결을 해제한다.
    • 그러나 Client 와 Server가 연결 상태를 유지해야 하는 경우가 발생한다. (login)
    • Client 단위로 상태정보를 유지하고 저장하기 위해서 Cookie와 Session이 사용된다.

Cookie

서버에서 사용자의 컴퓨터에 저장하는 정보파일이다.

  • 사용자가 별도의 요청을 하지 않아도 브라우저는 request시 request header를 넣어 자동으로 서버에 전송된다.
  • Key와 Value로 구성되고 String 형태로 이루어져 있다.
  • Browser 마다 저장되는 쿠키는 다르다!

사용목적

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

구성요소

  1. 이름 : 쿠키식별자
  2. 값 : 매핑값
  3. 유효기간 : 유효기간
  4. 도메인 : 쿠키를 전송할 도메인
  5. 경로(path) : 쿠키를 전송할 요청 경로

동작순서

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

특징

  • 클라이언트에 총 300개의 쿠키를 저장할 수 있다.
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
  • 하나의 쿠키는 4KB(=4096Byte) 까지 저장 가능
  • 쿠키는 Java에서 Class 이기 때문에 객체로 생성가능하다!

Usage

Cookie cookie = new Cookie(String name, String value);

/* 값 얻기 & 셋팅*/
cookie.setValue(String value); cookie.getValue();
cookie.setDomain(String domain),
setPath(String path),
setMaxAge(int expiry)
// 이하 get도 동일

/* 생성된 cookie를 client에 전송 */
response.addCookie(cookie);

/* Client에 저장된 cookie 얻기 */
Cookie[] cookies = request.getCookies();

Session

About Session

  • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
  • WAS의 memory에 Object 형태로 저장한다.
  • memory가 허용하는 용량까지 제한없이 저장 가능하다.

동작 순서

  1. Client 가 페이지를 요청.
  2. 서버는 접근한 Client의 Request-Header 필드인 Cookie를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인
    2-1. 결국 session도 일종의 쿠키를 이용한다!
  3. session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다.
  4. 서버에서 Client로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다. (Cookie : JSESSIONID)
  5. 클라이언트는 재 접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id값을 서버에 전달

특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
  • 웹 서버에 저장되는 쿠키(=Session Cookie)
  • 쿠키보다 비교적 보안성이 좋음
  • 저장 데이터의 제한이 없음(메모리가 가능한)
  • 각 Client마다 고유 session-id 부여
  • 세션은 interface 이기 때문에 생성이 불가하다

Usage

HttpSession session = request.getSession(); // default는 getSession의 파라미터가 false이다.

/* 값 저장 */
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();

Cookie와 Session의 공통

  • 전역에 저장하기 때문에 Project내의 모든 JSP에서 사용가능하다
  • Map의 형식으로 관리하기 때문에 Key값의 중복을 허용하지 않는다.
profile
Viva La Vida!

0개의 댓글