본문 바로가기
카테고리 없음

쿠키와 세션

by am6:00 2019. 9. 4.

웹에서 상태유지 기술

HTTP프로토콜은 상태 유지가 안되는 프로토콜입니다. 웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않기 때문에 이전에 무엇을 했고 지금 무엇을 했는지에 대한 정보를 갖고 있지 않습니다. 이러한 점을 보완하기 위해 상태를 유지할수 있는 Cookie와 Session기술이 등장합니다.

 

쿠키와 세션의 비교

  쿠키 세션
저장 위치

사용자 컴퓨터에 저장. 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일

서버에 저장. 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지
특징

1. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지

2. 클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음, 하나의 쿠키값은 4KB까지 저장

3. 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송

사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지 (동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인)

사용 예시

1.방문 사이트에서 로그인 시, 아이디와 비밀번호를 저장

2.자동로그인

3.팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크,

4.쇼핑몰의 장바구니

1. 로그인정보 저장( 로그아웃하지 않고 브라우저 종료후 재접속시 로그인 되어있는 상태유지에 사용)

 

 

쿠키 동작 방식

이미지 출처 - https://www.edwith.org/boostcourse-web/lecture/16798/

1) 클라이언트가 서버에 요청
2) 클라이언트의 정보중 유지해야할 정보가 있다면, 해당 데이터를 가지고 데이터 이름과 값으로 구성되고 유지시간 등의 정보를 갖는 쿠키 생성.
3) 응답 결과에 포함되어 클라이언트에 전송

 

 

이미지 출처 -https://www.edwith.org/boostcourse-web/lecture/16798/

4) 클라이언트가 쿠키를 포함한 요청들을 서버에 보냄
5) 서버는 클라이언트의 쿠키 데이터를 받아 과거 서버가 만든 쿠키데이터가 있는지 체크 후 쿠키에 저장된 데이터 이용해 작업 수행

 

쿠키 이용 방법

서버에서 쿠키 생성하기

Cookie cookie = new Cookie(이름, 값);
response.addCookie(cookie);

서버에서 쿠키를 생성하고, Response의 addCookie 메소드를 이용해 클라이언트에게 전송합니다.

 

 

클라이언트가 보낸 쿠키 정보 읽기

Cookie[] cookies = request.getCookies();

쿠키값이 없으면 null이 반환되며, getName()과 getValue()메소드를 이용해서 원하는 쿠키정보를 찾아 사용합니다.

 

 

클라이언트에게 쿠키 삭제 요청

Cookie cookie = new Cookie("이름", null);
cookie.setMaxAge(0);
response.addCookie(cookie);

setMaxAge()메소드는 쿠키의 유효기간을 설정할수 있는데, 값이 0인 쿠키 전송하여 유효기간을 끝내는 방식으로 삭제요청을 한다. 

 

cookie.setMaxAge(-1);

setMaxAge()의 값을 -1로 지정할 경우 브라우저가 종료될때 쿠키가 삭제된다.

 

cookie.setMaxAge(10 * 60); 

쿠키의 유효기간을 10분으로 위와같이 설정할수 있다.


 

세션 동작 방식

이미지 출처 - https://www.edwith.org/boostcourse-web/lecture/16798/

1) 클라이언트 요청시 서버에서 유지해야할 정보가 있다면 서버측에서
2)세션키 생성,
3)세션키 저장소 생성(저장소에 로그인에 필요한 아이디와 같은 데이터 저장)
4) 세션키 담은 쿠키 생성( 추후 클라이언트의 재요청시 클라이언트의 세션키를 통해 저장소 위치를 알기위한 데이터를 담은 쿠키) 5) 응답시 세션키를 담은 쿠키를 클라이언트에 응답함

이미지 출처 - https://www.edwith.org/boostcourse-web/lecture/16798/

6) 클라이언트가 요청시 세션키를 담고 있는 쿠키를 함께 전송해
7)서버는 클라이언트로부터 넘어온 쿠키값을 가지고 세션키를 얻어 해당 세션키의 저장소를 찾아 저장소에 들어있는 데이터 사용

 

세션 이용 방법

세션 생성 및 얻기

HttpSession session = request.getSession();

request의 getSession() 메소드는 서버에 생성된 세션이 있다면 세션을 반환하고 없다면 새롭게 세션을 생성하여 반환합니다.

HttpSession session = request.getSession(true);
HttpSession session = request.getSession(false);

request의 getSession()메소드 파라미터로 false 를 전달시 이미 생성된 세션이 있다면 반환하고 없으면 null을 반환합니다.

 

세션에 값 저장

setAttribute(String name, Object value)

name과 value의 쌍으로 객체 Object를 저장하는 메소드입니다. 세션이 유지되는 동안 자료를 저장합니다.

 

 

세션 값 조회

String value = (String) session.getAttribute("id");

setAttribute를 통해 저장된 자료는 getAttribute() 메소드를 이용해 조회할수 있습니다. 반환값은 Object 유형이므로 저장된 객체로 type 변환이 필요합니다. 

 

 

세션 값 삭제

removeAttribute(String name)

name 값에 해당하는 세션정보를 삭제합니다.

invalidate()

모든 세션 정보를 삭제하는 메소드 입니다.

 

 


출처

1. https://interconnection.tistory.com/74

 

쿠키와 세션 개념

쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 간단하게 정리해보려고 합니다. 일단 쿠키를 발급받고 사용하는 과정..

interconnection.tistory.com

2. https://www.edwith.org/boostcourse-web/lecture/16798/

 

[LECTURE] 1) 상태정보란? : edwith

들어가기 전에 이번 시간엔 웹에서의 상태 유지기술인 쿠키와 세션이 어떤 방식으로 동작하는지에 대해 알아보도록 하겠습니다.     학습 목표 쿠키의 동작 원리에 대해 이해한다. 세션... - 부스트코스

www.edwith.org