일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 회고
- ncloud
- 에프랩
- papago
- navercloud
- spring
- spring boot
- Naver Cloud Platform
- Database
- docker
- AssertJ
- 네이버클라우드
- OrientalUnity
- ngrinder
- Scheduler
- mybatis
- junit
- Naver Cloud
- DBDocs
- Pinpoint
- Thymeleaf
- React
- 네이버 클라우드
- Java
- object storage
- F-Lab
- Enum
- NaverCloudPlatform
- NCP
- NooBLoL
- Today
- Total
DevJong12
쿠키와 세션 본문
쿠키와 세션에 대해 알아보기전에 HTTP특징을 알아야한다.
HTTP통신의 특징은 Connectionless(비 연결 지향) 과 Stateless(상태정보 유지안함) 임.
Connectionless (비 연결 지향)??
클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성
(HTTP1.1에서 Connection 헤더에 keep-alive라고 설정하면 컨넥션을 유지할 수 있다고 한다.)
Stateless (상태정보 유지안함)
HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알수가 없슴.
이를 Stateless라고 한다.
HTTP프로토콜에서 상태를 유지하고 서비스를 제공하기 위해서 등장하는것이 이제 적을 쿠키와 세션이 되는 것이다.
쿠키 (Cookie)
쿠키는 클라이언트 로컬에 저장되는 key - Value쌍의 데이터파일이다.
구성요소
- 쿠키이름
- 쿠키값
- 만료시간
- 전송할 도메인명
- 전송할 경로
- 보안연결 여부
- HTTP ONLY여부
- 등등 만드는대로~
- 클라이언트가 서버에 로그인 요청을 합니다
- 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) 응답헤더에 set-cookie: user=chrisjune 를 추가하여 응답합니다.
3. 클라이언트는 이후 서버에 요청할 때 전달받은 cookie: user=chrisjune쿠키를 자동으로 요청헤더에 추가하여 요청합니다. 헤더에 쿠키값을 자동으로 추가하여 주는데 이는 브라우저에서 처리해주는 작업입니다.
쿠키의 기한이 정해져 있지 않고 명시적으로 지우지 않는다면 반 영구적으로 쿠키가 남아있게 됩니다.
쿠키값 확인 방법
브라우저 개발자도구의 네트워크에서 쿠키값을 확인할 수 있지만, 가독성이 떨어지고 수정이 불가합니다.
브라우저의 쿠키관리 탭 또는 쿠키관리 플러그인을 설치하면 쿠키를 쉽게 수정할 수 있습니다. 쿠키는 클라이언트에서 수정할 수 있기 때문에 위변조의 위험이 항상 존재합니다. 따라서 쿠키값(value)를 암호화해야 더욱 안전합니다.
세션 (Session)
브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 서버에 해주는 기술
- 클라이언트가 서버에 로그인 요청을 합니다
- 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) unique한 id를 sessionid라는 이름으로 저장합니다.
- 서버가 응답할 때 응답헤더에 set-cookie: sessionid:a1x2fjz를 추가하여 응답합니다.
4. 클라이언트는 이후 서버에 요청할 때 전달받은 sessionid:a1x2fjz쿠키를 자동으로 요청헤더에 추가하여 요청합니다.
5. 서버에서는 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인후 요청을 처리하고 응답합니다.
세션의 내용은 서버에 저장되기 때문에 계속하여 늘어날 경우 서버에 부하가 발생합니다.
쿠키와 세션의 차이점
저장위치
쿠키는 로컬, 세션은 로컬과 서버에 저장
보안
쿠키는 클라이언트에서 위변조가 가능함, 세션은 ID값만 소지를 하며 서버에도 저장이 되어있기 때문에 상대적으로 안전
LifeCycle
쿠키는 브라우저를 종료해도 파일로 남아있지만, 세션은 브라우저 종료 혹은 시간종료시 세션을 삭제한다.
속도
쿠키는 파일에서 읽기 때문에 상대적으로 빠르다, 세션은 요청마다 서버에서 처리를 해야하기에 비교적 느림
참조 : doooyeon.github.io/2018/09/10/cookie-and-session.html