반응형
session 이란!?
클라이언트별 정보를 브라우저가 아닌 웹서버에 저장하는것
클라이언트의 정보를 웹브라우저에 저장하는 기술을 cookie 라고 함
django session은 쿠키에 session_id 만 저장하고 클라이언트의 연결성을 확보한뒤 session_id 통해 활동할 수 있음
HTTP PROTOCOL 의 특징
- 비연결 지향(connection-less)
- 클라이언트가 request를 서버에 보내고, 서버가 클라이언트에 요청에 맞는 response를 보내면 바로 연결을 끊음
- 상태 정보 유지 안함(stateless)
- 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않음
- 쿠키와 세션의 필요성
- HTTP protocol은 위와 같은 특징으로 모든 요청 간 의존관계가 없음
- 즉, 현재 접속한 사용자가 이전에 접속한 사람인지 같은 사용자 인지 알길이없다는 거임
- 계속해서 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것이 장점인데, 통신할때 마다 새로 연결해야하기 떄문에 클라이언트는 매 요청때 마다 인증을 해줘야하하는 번거로움이 있음
- 이전 요청과 현재 요청이 같은 사람의 요쳥인지 알기위해서는 상태를 유지해야 하는데
- HTTP protocol에서 상태를 유지하기 위한 기술로 쿠키와 세션이 있음
what is a cookie?
- 개념
- 클라이언트 로컬에 저장되는 키와 값이 들어있는 파일
- 이름, 값, 유효 시간, 경로 등을 포함하고 있음
- 클라이언트의 상태 정보를 브라우저에 저장하여 참조함
- 구성 요소
- 쿠키 이름(name)
- 쿠키 값(value)
- 쿠키 만료시간 (expires)
- 쿠키를 전송할 도메인 이름(Domain)
- 쿠키를 전송할 경로(path)
- 보안 연결 여부(secure)
- HttpOnly 여부
- 동작방식
- 웹 브라우저가 서버에 요청
- 상태를유지하고 싶은 값을 쿠키(cookie)생성
- 서버가 응답할 때 HTTP 헤더(set-cookie)에 쿠키를 포함해서 전송
- set-cookie: id=doy
- 전달받은 쿠키는 웹 브라우저에 관리 하고 있다가, 다음 요청 때 쿠키를 HTTP 헤더에 넣어서 전송함
- Cookie: id=doy
- 어디에 사용할까?
- 로그인 아이디 비밀번호 저장할때
- 쇼핑몰 장바구니
what is a session?
- 개념
- 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지하는 기술
- 즉, 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때 까지 유지되는 상태
- 동작 방식
- 웹 브라우저가 서버에 요청
- 서버가 해당 웹브라우저(클라이언트)에 유일한 ID를 부여함
- 서버가 응답할 때 HTTP해더(set-cookie)에 session id 를 포함해서 전송 쿠키는 session id를 jsessionid라는 이름으로 저장함
- 웹 브라우저는 이후 웹 브라우저를 닫기까지 다음 요청 때 부터 부여된 session id 가 담겨 있는 쿠키를 http 헤더에 넣어서 전송함
- 서버는 세션 ID를 확인하고, 해당 세션에 관련된 정보를 확인후 응답함
세션도 쿠키를 사용하여 값을 주고받으면 클라이언트의 상태정보를 유지함
즉 상태정보를 유지하는 수단은 쿠키임
쿠키와 세션의 차이점
- 저장 위치
- 쿠키 : 클라이언트
- 세션 : 서버
- 보안
- 쿠키 : 클라이언트에 저장되므로 보안에 취약하다.
- 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
- 라이프사이클
- 쿠키 : 만료시간에 따라 브라우저를 종료해도 계속해서 남아 있을 수 있다.
- 세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
- 속도
- 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
- 세션 : 실제 저장된 정보가 서버에 있으므로 서버의 처리가 필요해 쿠키보다 느리다.
반응형