본문 바로가기

과목/컴퓨터 네트워크

쿠키와 세션 그리고 OAuth

쿠키와 세션을 왜 사용할까?

 

서버와 클라이언트가 통신을 할 때마다 서버는 클라이언트가 누구인지 알아야 한다.

HTTP는 connectionless, stateless라는 특성이 있다.

 

connectionless는 말 그대로 비연결성인데 클라이언트 요청 후 서버가 응답을 하면 연결이 끊어진다.

자기 할 일이 끝나면 뒤도 안돌아본다.

 

stateless는 비상태성이다.

상태 정보를 저장하지 않는다.

로그인되어 있는 사이트를 껐다가 켜면 다시 로그인을 해야 하는 경우가 예시다.

 

이런 특성들에 의해서 사용자는 매번 서버에 자신이 누군지 알려야하는 불편을 겪는다. 보완하기 위해 쿠키와 세션을 사용한다.

 

쿠키와 세션의 공통점은 요청하는 클라이언트가 누군지 인증할 때, 즉 서버라는 놈이 요청한 클라이언트가 누군지 확인이 필요할 때 사용한다는 것이다.

 

나다...

쿠키와 세션의 간단 차이점

  • 쿠키는 클라이언트(브라우저)에 저장된다.
  • 세션은 서버에 저장된다.

 

쿠키 Cookie

1. 클라이언트(브라우저)에 저장되는 정보다.

2. 요소

  • 이름: 쿠키 식별용
  • 값: 쿠키값
  • 유효시간: 이 시간이 지나면 쿠키가 삭제된다.
  • domain: 어떤 도메인에서 쿠키를 사용할 지 지정
    • ex: 'Domain=Domain; Domain=abc.com' abc.com이라는 도메인에서 쿠키가 살아 있음
  • path: 특정 경로에 쿠키를 지정할 수 있음(지정된 path의 하위 path에서도 쿠키가 살아있음)
    • ex: 'Path=Path; Path=/cookie'

특정 사이트에서 로그인한 뒤 브라우저의 인터넷 사용 기록 삭제에서 쿠키 삭제를 하고 새로고침하면 로그아웃되어 있다. 팝업창에서 일주일간 보지 않기를 체크하고 쿠키 삭제를 하면 팝업이 다시 뜬다. 쿠키를 사용해서 상태를 유지하기 때문이다.

3. 동작 방식

  1. 클라이언트가 서버에 요청
  2. 서버에서 쿠키 생성
  3. 서버는 HTTP 헤더에 만들어진 쿠키를 담아서 응답을 보냄 (유효시간 내에는 쿠키가 살아있음)
  4. 클라이언트가 서버에 요청 시 쿠키를 갖고 있다면 HTTP 헤더에 쿠키를 담아서 요청함
  5. 서버에서 쿠키 갱신이 필요하면 갱신된 쿠키를 HTTP 헤더에 담아서 응답 

 

 

세션 Session

1. 서버에 저장되는 값이다.

2. 세션 ID는 서버에서 발급하지만 클라이언트에 저장된다.

3. 클라이언트가 서버에 요청 시 서버는 서버의 세션 ID와 클라이언트의 세션 ID가 일치하는지 확인한다. 그리고 서버는 아 이 클라이언트 놈이 이 세션을 할당받은 놈이구나 하고 알게 되는 것이다. 즉 세션 ID는 서버의 세션을 사용할 수 있는 클라이언트인지 확인하기 위한 수단인 것이다. 이렇게 되면 매 서버 요청 시마다 세션 ID로 클라이언트 자신이 누군지 인증하게 되고 매번 로그인을 할 필요가 사라지는 것이다.

 

세션을 사용할 때 서버에서는 동일한 key를 가지고 클라이언트들의 쿠키들을 읽는데 이게 어떻게 가능할까?

서버는 클라이언트마다 세션ID를 각각 부여하기 때문에 구분이 가능하다. 서버가 갖고 있는 세션ID와 요청 헤더에 있는 쿠키에 담긴 세션ID가 일치하는지 아닌지를 판단한다.

 

세션 쿠키는 서버가 발행해서 클라이언트에 응답 시 넘긴다. 클라이언트는 서버에 요청 시 쿠키를 헤더에 담아 보낸다.

세션 ID는 쿠키에 담긴다. 만약 세션 ID를 URL parameter에 넣으면 중간에 해커가 값을 가로채서 위변조할 수 있기 때문에 상대적으로 해킹이 어려운 암호화된 값인 쿠키에 세션 ID를 싣는 것이다.

 

쿠키와 세션의 차이

1. 쿠키는 클라이언트에 저장된다.

2. 세션은 서버에 저장된다. 그러나 클라이언트를 구분하는 세션 ID는 서버와 클라이언트 양측 모두에 저장된다.

3. 서버에 정보를 저장하는 세션이 쿠키보다 보안이 더 좋다.

4. 속도는 쿠키가 더 빠르다. 쿠키는 정보를 직접 서버에 갖다주지만 세션은 클라이언트가 맞는지 확인하고 서버측에서 정보를 사용하기 때문이다.

 

OAuth

토큰 기반의 사용자 인증 방식이다.

쿠키는 사용자 컴퓨터가 해킹당할 수 있으니 보안에 취약하고 그보다 나은 세션도 중간에 해킹당할 우려가 있다. 또한 세션은 서버에 부하를 줄 수 있다.

 

이런 문제들을 보완하기 위해 토큰이 나왔다.

구글, 페이스북, 네이버와 같은 웹 서비스로부터 토큰을 발급 받아서 타 서비스의 계정으로 로그인할 수 있는 것이다.

 

 

대학생 시절 수강신청을 할 때 크롬, 익스플로러를 동시에 켜놓고 수강신청 사이트에 접속했었는데 서버가 브라우저마다 세션 ID를 전송해주고 브라우저는 받아온 세션 ID를 각각 저장하기 때문에 가능했던 것 같다.

 

 

 

참고 https://victorydntmd.tistory.com/34?category=719464

 

[HTTP] 쿠키( Cookie )와 세션( Session )

1. HTTP의 특징과 쿠키와 세션을 사용하는 이유 서버와 클라이언트가 통신을 할 때 마다 서버는 클라이언트가 누구인지 인증을 계속해야 합니다. 그 이유는 HTTP 프로토콜이 connectionless, stateless한 특성이..

victorydntmd.tistory.com

https://opentutorials.org/course/3387/21745

 

쿠키 옵션 - path & domain - 생활코딩

수업소개 쿠키의 유효범위를 정의하는 path와 domain 옵션을 살펴봅시다.  강의 소스코드 변경사항 nodejs/cookie.js var http = require('http'); var cookie = require('cookie'); http.createServer(function(request, response){ console.log(request.headers.cookie); var cookies = {}; if(request.headers.

opentutorials.org

http://www.lassosoft.com/Tutorial-Understanding-Cookies-and-Sessions

 

Lasso Programming: Tutorial: Understanding Cookies and Sessions

Use 

www.lassosoft.com

https://stackoverflow.com/questions/36175970/what-is-the-concept-of-saving-session-id-in-cookie

 

What is the concept of saving session id in cookie?

I am developing a secured website for an enterprise . I want it to be perfectly secured from all known vulnerabilities. I came across creating secure cookies and enabling HTTPOnly but in that example

stackoverflow.com

https://stackoverflow.com/questions/5593359/where-does-session-save

불러오는 중입니다...