-
쿠키 & 세션CS 지식/○ Web 2021. 4. 12. 17:06
■ 쿠키
1) 정의 :
서버가 클라이언트 브라우저에 보내어 브라우저가 저장하였다가, 서버의 요청이 있을 때 참조할 수 있는 문자열 정보
> 웹페이지 방문시 방문 기록 등 브라우저에서의 정보들이 저장된 텍스트 파일
> HTTP 통신이 비연결성이기 때문 / Stateless
> '어떤' '누구' client의 요청인지 파악하기 위함
(서버를 대신하여 웹브라우저에 관련 내용을 저장,
필요할 때 꺼내어서 전송하여 사용자 식별하는 방식) = 인증 등이 필요한 작업에 대해
> key, value 형태로 저장
> 브라우저마다 저장되는 쿠키는 다름
2) 종류
(a) 기술적 쿠키 : 검색하는 주체가 사람 / application 인지 이용자 구분
(b) 분석 쿠키 : 어떤 것을 주로 검색하는지, 시간, 언어 등의 정보 수집
(c) 광고 쿠키 : 검색 내용 / 언어에 따라 광고 게재
> id정보 저장(로그인 기능), 최근 검색관련 광고, 쇼핑몰 장바구니 기능, 일정기간 팝업 차단 체크 등...
3) 생성 과정
(a) 클라이언트 접속 → 서버 response시 쿠키 정보를 header의 set-cookie에 넣어 전달
(b) 클라이언트는 request시 (a)에서 받은 cookie를 header의 cookie에 넣어 전달
(c) 서버는 다시 쿠키와 함께 respond
... 이후 req / res는 header에 포함되어 전송됨
4) 옵션
- Max-age : 현재 시간 기준으로 쿠키 유지할 time 설정
- Expires : 쿠키 만료 날짜 지정
- Secure : HTTPS 프로토콜 상 암호화된 요청일 경우만 전송
- HttpOnly : Cross-stie 스크립트 공격 방지, JS의 document.cookie API 접근 불가
- Domain : 쿠키가 전송될 호스트 명시
- Path : 쿠키 header 전송을 위해 요청되는 url 경로 포함
- SamSite : 쿠키가 cross-site 요청과 함께 전송되지 않음을 요구, 위조공격에 대한 보호
5) 효과
> 쿠키로 인하여 로그인 다시 하지 않고 사용자 정보 유지(이후 session과 관련)
- 쿠키가 없다면 사용자정보를 계속해서 넘겨주어야하는 단점
- req 안에 쿠키가 포함되어있기 때문에, 받으면서 동시에 client 식별 가능
서버에서 session 사용시 로그인 지속 가능
■ 세션
1) 정의 :
쿠키가 header에 포함되는 방식 때문에, 보안이 필요한 요소가 노출될 수 있음
> 비밀번호와 같은 인증 정보를 쿠키에 저장하지 않고
JSESSIONID(Session id [※tomcat에서 발급하는 예시]) 값을 대신 저장
> 서버 side에서 세션을 통해 인증 정보를 이 JSESSIONID로 관리함
> 서버 session에서는 로그인 상태, 시간, 닉네임, 만료기한 등을 관리
2) 생성 과정
(a) 클라이언트 request → Session id 미존재
(b) .... 로그인 과정 수행(db 등!)
(c) response로 쿠키에 Session id 생성하여 전달
(d) .... 쿠키 관련 생성 절차 마무리
(e) 서버는 requset로 온 쿠키에 포함된Session id로 사용자 식별, 인증 정보 필요한 곳에 사용
3) 효과/특징
- 브라우저 단위로 저장, 브라우저 종료시 제거
- 로그아웃 시 새로운 대상으로 판단, 새로운 session 생성
- 매번 page 변경 시 db 조회 등의 절차, 재로그인 등을 할 필요 없어 사용자 경험 증대 및 서버 자원 아낄 수 있음
4) 옵션
- Secure : Https 통신을 위해 secure = true 설정
- Httponly : true로 설정하여 javascript로 session 쿠키 사용할 수 없도록 강제 설정 가능
참조:
opentutorials.org/course/3400/21837
반응형'CS 지식 > ○ Web' 카테고리의 다른 글
HTTP 통신 기본 & Rest API (0) 2021.04.12