2021. 5. 6. 11:16ㆍComputer Science/CS
HTTP protocol 쿠키, 세션
HTTP 프로토콜.. 기본적으로 웹서버와 클라이언트가 통신을 할 때 마다 서버는 클라이언트가 누구인지 계속 인증하는 과정이 필요하다. 그 이유는 HTTP 프로토콜이 connectionless, stateless한 특성이 있기 때문이다.
- Connectionless : 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어버리는 특성
- Stateless: 통신이 끝나면 상태를 유지하지 않는 특성
이 때 인증과정에서 사용되는 것이 쿠키와 세션이다. 예컨데, 쿠키와 세션이 없으면 우리는 페이지를 이동할 때 마다 계속해서 로그인을 해야 할 것이다. 서버가 클라이언트를 기억하지 못하기 때문이다.
Cookie
쿠키는 서버에서 클라이언트에게 저장하도록 시키는 정보다. 보통 클라이언트가 서버에 request하면, 서버는 쿠키를 생성해서 HTTP헤더에 쿠키를 박고 클라이언트에 응답한다. 클라이언트가 쿠키를 가지고 있는 경우는 쿠키와 함께 서버에 request 한다. 쿠키정보는 개발자도구로 확인할 수 있다. 크롬페이지에서 'F12'를 클릭하고, 상단탭에서 Application에 들어가면 왼쪽에 Cookies탭이 보인다.
이런식으로 확인할 수 있다. 쿠키에는 몇 가지 정보들이 포함 돼 있다.
- Name: 쿠키에 저장하고자 하는 이름
- Expires: 명시된 쿠키의 만료 날짜 (Default: 무제한)
- Max-Age: 쿠키 만료 시간 (Default: 무제한)
- Size: 쿠키 사이즈
- Secure: 만약 해당 값이 true라면, 쿠키는 SSL을 사용하는 HTTPS연결로만 전송이 가능해진다 (= HTTP일 때는 불가)
- HttpOnly: js에서 사용 불가능하도록 한다(=자바스크립트로 값 변경이 불가능하다) 만약 js로 접근이 가능해진다면 쿠키값이 변경되어 보안에 취약할 수 있다
- Domain: 쿠키가 사용 될 사이트를 지정한다
- Path: URL 디렉토리 경로를 지정한다
Session
세션은 서버가 웹으로 접근(request)한 클라이언트를 식별하는 방법이다. 사실 쿠키와 비슷한 역할을 한다. 쿠키와 차이점을 굳이 꼽자면 쿠키는 클라이언트 저장소에 저장 되고, 세션은 서버 저장소에 저장된다는 점이다.
- 서버에서 세션 ID를 발행하여 관리한다
- 각 클라이언트에게 고유 ID를 부여한다
- 사용자가 많을 수록 메모리를 차지한다 (서버니까)
- 쿠키보다 느리다 (서버에서 작업을 해야되니까)
- 클라이언트 접속 종료 (브라우저 닫기 등)시 서버에 저장 된 session ID는 소멸된다
웹서버는 클라이언트의 request header에 있는 쿠키를 확인해 session ID가 있는지 확인한다. 만약 없으면 session ID를 생성&부여 한 뒤 응답을 보낸다. 같은 클라이언트가 두 번째 요청을 하게 되면 그 때 부터는 쿠키에 session ID가 포함 돼 있다.
Ref 1) victorydntmd.tistory.com/34?category=719464
Ref 2) mohwaproject.tistory.com/176
'Computer Science > CS' 카테고리의 다른 글
Connect MySQL with DBeaver (0) | 2020.10.31 |
---|---|
Mac MySQL 설치와 DB, TABLE 생성 (0) | 2020.10.28 |
SSH 로컬 포트 포워딩 (SSH 터널링) (3) | 2020.08.30 |