Developer Cafe

세션(Session) vs 쿠키(Cookie) 차이 본문

JAVA

세션(Session) vs 쿠키(Cookie) 차이

개발자 카페 2021. 3. 6. 00:07
728x90

세션(Session)

  • 웹 컨테이너에 정보를 보관할 때 사용(오직 서버에만 생성)
  • 한 웹 브라우저마다 한 세션을 생성한다.
  • 세션은 지정한 유효시간만큼만 유지(실행 중 지속 사용되는 데이터의 저장소로 적합)

1) 세션 생성

<%@ page session = "true" %>
<% session.setAttribute("키", 값);

2) session 기본 객체

  • page 디렉티브를 통해 세션 속성 지정을 통해 session 객체를 얻을 수 있음
  • 쿠키를 이용해서 세션ID를 공유
  • session 객체의 메소드

String getId() : 세션 고유의 ID를 반환

long getCreationTime() : 세션이 생성된 시간을 반환(Unix time)

long getLastAccessedTime() : 웹 브라우저가 마지막에 세션에 접근한 시간 반환

3) 세션 종료

  • 세션을 유지할 필요가 없으면 session.invalidate() 메소드를 사용해서 세션 종료

4) 세션 유효 시간

  • session은 최근 접속 시간을 저장, session 기본 객체를 사용할 때 마다 갱신
  • session.getLastAccessedTime() 메소드는 최근 접근 시간 반환

5) request.getSession() 메소드

  • 세션 객체를 반환하는 메소드
  • 매개변수에 false 입력시 세션이 존재하는 경우에만 객체 리턴

쿠키(Cookie)

  • 웹 브라우저가 보관하는 데이터
  • 필요시 웹 서버에서 쿠키를 생성해 웹 브라우저에 응답시 함께 전송
    1. 웹 브라우저는 쿠키를 쿠키 저장소에 보관
    2. 요청시 웹 서버에 쿠키를 함께 전송
    3. 전송받은 쿠키를 이용해서 필요한 작업 수행

1) 쿠키의 구성요소

  1. 이름: 쿠키의 식별자
  2. 값: 식별자가 가진 값
  3. 유효시간: 쿠키의 유지 시간
  4. 도메인: 쿠키를 전송할 도메인
  5. 경로: 쿠키를 전송할 요청 경로

2) 쿠키 생성

<%
  Cookie cookie = new Cookie("cookieName", "cookieValue"); // 쿠키 생성
  response.addCookie(cookie); // 웹 브라우저에 전송
%>

3) 쿠키 클래스의 메소드

  1. String getName() : 쿠키 이름 반환
  2. String getValue() : 쿠키 값 반환
  3. void setValue(String value) : 쿠키 값 지정
  4. void setDomain(String pattern) : 쿠키가 전송될 서버의 도메인 지정
  5. String getDomain() : 쿠키의 도메인 반환
  6. void setPath(String uri) : 쿠키를 전송할 경로 지정
  7. String getPath() : 쿠키의 전송 경로 반환
  8. void setMaxAge(int expiry) : 쿠키의 유효시간을 초 단위로 지정
  9. int getMaxAge() : 쿠키의 유효시간 반환(초 단위)

4) 쿠키 값 읽어오기

Cookie cookies[] = request.getCookies();

if(cookies != null && cookies.length > 0){
  for(int i = 0 ; i < cookies.length ; i++) {
    name[i] = cookies[i].getName()
    value[i] = URLDecoder.decode(cookies[i].getValue(), "utf-8");
  }
}

5) 쿠키 값 변경 및 쿠키 삭제하기

  • 변경: 같은 쿠키 이름의 쿠키 객체를 생성해서 응답 데이터에 추가
  • 삭제: setMaxAge() 메소드를 이용, 매개변수로 0 입력시 삭제됨

6) 쿠키의 도메인

  • 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야할 때 도메인 지정
  • 사용: setDomain() 메소드를 이용해서 도메인 지정
    • -> 해당 도메인에 모두 쿠키를 전송
    • *웹 브라우저는 현재 서버의 도메인과 다른 도메인에 대한 쿠키 생성은 허용하지 않음
setDomain(".naver.com"); // mail.naver.com, www.naver.com, blog.naver.com 등등 모든 naver.com에 쿠키 저장

7) 쿠키의 경로

  • 쿠키를 공유할 기준 경로 지정
  • 웹 브라우저는 저장한 쿠키의 경로를 확인하고 해당 경로에 맞춰서 쿠키를 전송
  • 사용: setPath() 메소드 사용

세션(Session) vs 쿠키(Cookie) 차이

  • 가장 큰 차이점은 사용자의 정보가 저장되는 위치입니다. 때문에 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용합니다.
  • 보안 면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠릅니다. 그 이유는 세션은 서버의 처리가 필요하기 때문입니다.
  • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑(해킹기법중하나) 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋습니다.
  • 쿠키는 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다. 또한 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있다.
  • 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
  • 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
728x90

'JAVA' 카테고리의 다른 글

사례를 통해 JAVA코드로 달력 구현하기  (0) 2021.06.23
Optional  (0) 2021.05.21
DTO 설계하기  (0) 2021.05.11
JIT 컴파일러 (Just-In-Time 컴파일러)  (0) 2021.03.06
JAVA/Spring boot 네이버 메일 보내기 설정하기  (2) 2021.02.25
Comments