-
쿠키 vs 세션CS 지식/네트워크(Network) 2023. 4. 21. 17:42
Cookie(쿠키)
- user의 computer에 저장이 되는 작은 text file이다.
- Cookie의 file size는 최대 4KB이다.
- 사용자가 처음 웹사이트를 방문하면 사이트가 data packet를 cookie 형태로 사용자 computer로 보낸다.
- client 측에 아무나 볼 수 있는 text 형태로 저장되기 때문에 상대적으로 안전하지 않다.
- String data type만 저장한다.
- 필요에 따라 cookie를 enable 하거나 disable 할 수 있다.
- cookie가 저장되는 경로는 브라우저에 의해 결정될 수 있지만 보통 internet explorer는 주로 Temporal Internet File Folder에 저장한다.
- 브라우저마다 저장되는 쿠키가 달라서 서버에서는 브라우저가 다르면 다른 사용자로 인식(크롬, 인터넷 익스플로러 각각..)
- 쿠키는 사용자가 누구인지 추적하고 있기 때문에 개인정보 유출 방지를 위해 쿠키를 주기적으로 지우라는 것.
ex) Youtube 채널에서 노래들을 검색하고 다음에 다시 Youtube를 방문하면 cookie가 우리의 browsing history
(검색 기록)을 읽고 비슷한 노래를 보여준다.
여러 페이지 이동할 때마다 로그인하지 않아도 됨.
Cookie의 목적
- 세션 관리
=> server에 저장해야 할 장바구니, 로그인 등의 정보 관리 - 개인화
=> 사용자 선호, 테마 등의 세팅 - 트래킹
=> 사용자 행동 기록하고 분석 용도
Cookie 구성
PHP로 cookie를 생성하는 경우에는 setcookie() 함수를 사용한다.
setcookie(name, value, expire, path, domain, secure, httponly);
path : cookie가 valid 한 URL path. 어떤 path일 때 cookie를 보낼지.
domain : specify what domain the cookie is used for. cookie가 사용하는 domain지정
이 값이 현재 탐색 중인 domain과 일치하지 않으면 "타사 쿠키"로 간주하며 브라우저에서 거부.
=> 한 domain에서 다른 domain에 대한 쿠키를 사용하지 못하게 설정
secure : 보안 연결 설정. HTTPS 인 경우에만 쿠키가 전송됨.
httponly : HTTP 외의 다른 통신 사용 가능 설정. 설정 시 javascript에서 쿠키에 접근할 수 없음.
쿠키 조작 방지를 위해 설정하는 것을 추천함.
Cookie 동작 방식
https://velog.io/@xchdtk/HTTP-%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session%EC%9D%98-%EC%9D%B4%ED%95%B4 - Cookie는 브라우저와 HTTP header를 통해서 share 된다.
- 브라우저는 해당 사이트에 접속할 때마다 지속해서 해당 Cookie를 보낸다.
- 그림의 3)에서 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 HTTP헤더에 포함시켜 응답
Cookie 종류
https://velog.io/@xchdtk/HTTP-%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session%EC%9D%98-%EC%9D%B4%ED%95%B4 Cookie 단점
- Cookie에 대한 정보를 매 header에 추가하여 보내기 때문에 상당한 트래픽 발생
- 결제 정보 등을 Cookie에 저장했을 때 Cookie가 유출되면 보안에 대한 문제도 발생 가능
Session(세션)
- user가 특정 network application에 로그인했을 때 시작해서 user가 로그아웃 하거나 시스템을 종료하면 자동으로 삭제된다.
(HTTP protocol은 stateless 해서 다른 페이지로 넘어갈 때 user 정보가 저장되지 않는데 이를 해결하기 위해서 session이 사용됨.)
계속 남기고 싶으면 database에 저장해야 한다.
- binary나 암호화된 형태로 서버에 저장이 되고 서버에 의해서만 복호화 될 수 있기 때문에 Cookie 보다 더 안전하다.
- 일정시간(방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점) 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술.
- 세션 ID로만 소통. 세션 ID는 보통 쿠키를 사용해 전달됨.
Session 동작 방식
https://www.javatpoint.com/session-vs-cookies - 각 user는 sessionID로 identify 되는데 sessionID는 cookie, form field, URL에 저장이 된다.
- 브라우저에 저장이 된 sessionID를 포함한 Cookie는 server에게 다시 보내진다. server는 sessionID를 비교해서 저장된 sessionID와 동일하면 HTTP200을 response로 보낸다.
- Client는 매 요청마다 전달받은 sessionID를 헤더 쿠키에 넣어서 요청.
- 만약 client가 로그인을 요청하면 서버는 session을 로그인한 사용자 정보로 갱신하고 새로운 sessionID를 발급하여 응답으로 돌려줌. 이후 client는 로그인 사용자의 sessionID 쿠키를 요청과 함께 전달.
Session 구성
https://medium.com/@cute_mustard_sardine_17/%EC%BF%A0%ED%82%A4-cookie-%EC%84%B8%EC%85%98-session-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-e8a974d76df8 - SessionID, 만기날짜, 쿠키 정보를 담고 있는 세션 정보 포함
Cookie vs Session
둘 다 user 정보를 가지고 있음.
Cookie
- local computer인 client side에 저장된다.
- user가 설정한 시각에 수명이 다한다.
- 특정 양의 정보만 담을 수 있다. (limited amount of data) 한 쿠키당 4KB.
- local computer에 저장되어서 시작하기 위해 별도의 function이 필요하지 않음.
-비교적 secure(안전) 하지 않다.
- text file에 data를 저장한다.
- cookie의 data를 삭제하기 위해 expiration data를 설정할 수 있다.
이 경우 정해진 시각에 만료된다.
- 세션보다 빠름.
Session
- server side에 저장된다.
- user가 브라우저를 나가거나 로그아웃하면 세션은 끝난다.
- 무한한 양의 data를 담을 수 있다.
- 양에 제한은 없지만 script는 한 번에 최대 128MB를 처리할 수 있다.
- session을 시작하기 위해서는 start() method를 꼭 사용해야 한다.
- 비교적 secure 하다.
- 암호화된 형태로 data가 저장된다.
- 쿠키보다 느림.(세션은 서버의 자원을 사용해서 서버의 처리가 필요하기 때문)
- 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨.
- 비밀번호와 같은 인증 정보를 쿠키에 저장하지 않는 대신 사용자 식별자인 sessionID를 저장함.
=> 세션을 사용하면 좋지만 세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다 보면 서버의 메모리가 감당할 수 없어질 수가 있고, 속도가 느려질 수 있기 때문에 쿠키 사용.
Further Topics
- Cache vs Cookie vs Session
- CSRF protection과 Samesite Cookie
- PHP
- JWT(JSON Web Token)
Reference
- https://www.geeksforgeeks.org/difference-between-session-and-cookies/
- https://www.javatpoint.com/session-vs-cookies
- https://velog.io/@xchdtk/HTTP-%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session%EC%9D%98-%EC%9D%B4%ED%95%B4
- https://hyojin96.tistory.com/entry/Cookie%EC%99%80-Session
- https://interconnection.tistory.com/74
'CS 지식 > 네트워크(Network)' 카테고리의 다른 글
OSI 7 layer와 TCP/IP 4 layer (0) 2023.05.25 세션 기반 인증 vs 토큰 기반 인증 (0) 2023.05.12 대칭키 vs 공개키 (0) 2023.05.05 Load Balancing(로드밸런싱) 과 Proxy (0) 2023.05.01 HTTP 프로토콜(Hypertext Transfer Protocol) (0) 2023.04.18 - 세션 관리