Today I Learn (TIL)
#38 JS - Session(세션) & cookie(쿠키) 개념
이웃집 친구
2020. 12. 17. 22:00
반응형
* HTTP 통신은 요청과 응답을 진행하고, 접속을 끊는다.
-- > Connectionless(비 연결 지향)
* 그렇기 때문에 클라이언트의 상태 정보를 알 수 없다.
-- > Stateless (상태 정보 유지 안 함)
=> HTTP 프로토콜에서 상태를 유지하기 위해 쿠키와 세션이라는 방법이 존재
| Session | Cookie |
| 브라우저 종료되면 세션 삭제 | Key - Value 쌍의 데이터 파일 |
| 로그인 했다 치면, sessionid(유니크한 id) 응답 헤더에 포함 | 쿠키 이름, 쿠키 값, 만료 시간, 전송할 도메인, etc ... |
| 그 이후 클라이언트는 자동으로 위의 id를 요청 헤더에 추가 | 로그인하면, cookie 발급 --> 이 쿠키로 인증/인가 진행 |
| 크롬 개발자 탭 - > Application 탭에서 확인 가능 | |
| 보안) 서버에서 정보를 갖고, session id만 응답했기 때문에, session id를 탈취해도 안전 |
보안 ) 안전을 위해 쿠키값 암호화 |
| 속도) 요청 마다 서버에서 처리 => 비교적 느림 | 속도) 파일에서 읽기 때문 = > 상대적으로 빠름 |
| 로컬과 서버에 저장 | 클라이언트 로컬 스토리지에 저장 ( 만료기간..) |
* JWT(Json Web Token)
보통 로그인 기능에 많이 사용한다.
브라우저를 껐다 켜도, 로그인이 가능하게 만들기 위해 Local Storage에 저장한다 생각할 수 있는데, 탈취의 가능성이 있기 때문에, 저장하지 않도록 한다.
Vue.js를 사용한다면, Vuex에 저장하거나 하는 방향을 택한다.
혹은, Cookie header에 포함해서 전송하는 방법이 있다. 이 때, CSRF 공격에 취약해질 수 있지만, CORS를 활용하여 도메인을 설정한다면, 임시방편이 가능하다.