
사용자가 특정한 웹 사이트에 방문할 때, 사용자 컴퓨터(클라이언트)에 저장하는 기록 파일
HTTP에서 클라이언트의 상태정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
ex) "아이디와 비밀번호를 저장하시겠습니까?"
ex2) "오늘 이 창을 다시 보지 않기" 체크
위험
XSS(크로스 사이트 스크립팅) 공격, 쿠키 탈취 등의 보안 위협 노출 가능성이 있다.
Why?
쿠키 데이터가 암호화되지 않은 채로 전송될 수 있기 때문이다.
How?
1. 중요한 정보는 쿠키에 저장하지 않기
2. 가능하다면 HTTPS를 통해 쿠키를 전송하기
3. HttpOnly와 Secure 속성을 쿠키에 설정하기
한명의 사용자의 상태를 유지하는 기술
서버가 클라이언트에게 고유한 Session ID를 부여하면, 클라이언트는 접속할 때마다 Session ID와 함께 요청한다.
ex) 웹 사이트에 한 번 로그인 하면, 다른 페이지로 이동해도 계속 접속 상태가 유지된다
ex2_How) 웹사이트 로그인 -> 서버에서 세션 ID에 따른 회원 ID 정보를 기록 -> 클라이언트는 해당 세션을 계속 유지한다(메일함에 접속할 때도 세션ID를 서버에 전송) => 즉 세션은 자신이 누구인지를 서버에 알려주는 역할을 수행한다.

위험
세션 하이재킹(세션을 악용하여 컴퓨터 시스템의 정보나 서비스에 대한 무단 액세스를 얻는 것) 공격에 노출 가능성이 있다.
Why?
서버를 사용하기 때문에 서버 클라이언트 통신 시 TCP 시퀀스 넘버를 이용하기 때문이다.
How?
1. 세션 ID의 재생성하기
2. 세션 데이터를 암호화하기
(가장 큰 차이점은 데이터가 저장되는 위치)
쿠키 : 클라이언트 측의 웹브라우저에 저장된다.
세션 : 서버 측에 저장된다.
쿠키 : 사용자의 브라우저를 통해 서버와 데이터를 주고받기 위해 설계되었다.
세션 : 서버에서 사용자의 상태를 유지하기 위해 사용된다.
쿠키 : 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 유지된다.
세션 : 사용자가 로그아웃하거나 브라우저를 닫는 등의 행동으로 종료된다.(사용자의 상태를 일시적으로 관리하기 위한 목적으로 사용되기 때문이다.)
쿠키 : 클라이언트 로컬에 저장되기 때문에 보안에 취약하다.
세션 : 세션 ID만 저장하고 구분하여 서버에서 처리하기 때문에 비교적 보안성이 좋다.
쿠키 : 서버에 요청시 속도가 빠르다(정보가 클라이언트에 있기 때문)
세션 : 처리 속도가 비교적 느리다(정보가 서버에 있기 때문)