쿠키 / 세션
1. 쿠키
웹 브라우저가 보관하는 데이터로 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다.
쿠키는 클라이언트와 서버 모두 생성할 수 있는데, JSP 에서 생성하는 쿠키는 웹 서버에서 생성하는 쿠키이다.
쿠키를 생성하게 되면, 응답 헤더 값(Set-Cookie) 을 통해서 전달된다.
1-1. 쿠키 동작방식
쿠키 생성 : JSP 프로그래밍에서 쿠키는 웹 서버 측에서 생성해 브라우저에 전달한다.
쿠키 저장 : 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다. (메모리나, 파일)
쿠키 전송 : 웹 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹 서버에 전송
기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.
하지만 같은 도메인을 사용하는 서버에 동일한 쿠키를 모두 전송해야 하는 경우도 있을 수 있기에,
setDomain()
메서드를 통해 생성한 쿠키를 전달할 수 있는 도메인을 설정한다.
1-2 . 쿠키를 통한 로그인 상태 유지
구현 방식은 다음과 같다.
로그인에 성공하면 특정 값을 갖는 쿠키를 생성한다.
요청이 들어올 시 해당 쿠키와 함께 요청이 들어오면 로그인한 상태라고 판단한다.
로그아웃하면 클라이언트 측에서 해당 쿠키를 삭제한다.
사용자 정보를 클라이언트 측에서 관리한다는 특징을 가지고 있다.
1-3. 쿠키의 단점
쿠키의 값은 임의로 변경이 가능하다.
쿠키에는 추정 가능한 값을 사용하면 안된다.
추정 가능한 값이라면 조작해 다른 사람의 정보를 탈취할 수 있다.
쿠키 가 탈취되면 공격자가 사용자를 가장할 수 있다.
쿠키의 값으로 개인정보가 저장되어 있다면 언제든지 탈취될 수 있다.
쿠키에는 개인정보는 절대 유출하면 안된다.
만료시간을 짧게 유지해야 한다.
2. 세션
쿠키 값을 가지고 로그인을 구현 했을 때 쿠키 값 변조의 문제를 가지고 있기 때문에, 그 문제를 개선한 세션이 등장했다.
세션은 쿠키와 달리 웹 브라우저가 아닌 서버에 값을 저장한다.
서버는 세션을 사용해 클라이언트 상태를 유지할 수 있기에 로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용한다.
웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다.
2-1. 세션의 동작방식
세션 생성 : 웹 브라우저마다 별도의 세션을 가지며, 이 때 각 세션을 구분하기 위해서 세션마다 고유 ID 를 할당하는데, 그 아이디를 세션 ID(JSESSIONID) 라고 한다.
웹 서버는 웹 브라우저에게 세션 ID 를 전송하고, 웹 브라우저는 웹 서버에 연결할 때마다 매번 세션 ID 를 보내서 웹 서버가 어떤 세션을 사용할지 판단할 수 있게 한다.
쿠키를 통한 세션 ID 공유 : 웹 서버와 웹 브라우저가 서로 세션 ID 를 공유할 수 있는 방법이 쿠키를 통한 공유이다.
쿠키 목록 중 JSESSIONID 인 쿠키는 세션 ID 정보를 공유하기 위한 쿠키이다.
2-2. 세션의 단점
하지만 이 또한 세션ID 를 담은 쿠키를 탈취 당하면 보안의 위험이 생긴다.
3. 쿠키 vs 세션
쿠키는 쿠키의 이름이나 데이터를 네트워크를 통해 전달되기 때문에, HTTP 프로토콜을 사용하는 경우 중간에 누군가 쿠키의 값을 읽어올 수 있다. (개인정보 탈취의 위험이 높다..)
세션은 모든 정보가 서버에 저장되기 때문에, 중요한 데이터를 저장하기에 적합한 장소이다.
하지만 세션은 여러 도메인에서 공유될 수 없기 때문에, 공유가 필요한 상황에서는 쿠키를 사용해서 로그인 정보를 저장한다.
Last updated