session / cookie

katanazero·2020년 3월 12일
0

http

목록 보기
1/1
  • HTTP(Hypertext Transfer Protocol) 특성 때문이다.
1. 비연결지향(Connectionless)
request(요청) 를 보내면 서버는 작업 후 클라이언트에게 response(응답) 를 보내고 연결을 끊는다.
연결을 끊어버리기 때문에 클라이언트에 상태를 알 수가 없다.

2. 상태정보유지안함(Stateless)
서버와 클라이언트에 통신이 끝나고 연결을 끊어버리는 순간 어떠한 상태도 유지하지 않는다.
  • 위 두가지를 보안하고자 session / cookie 과 등장

session

  • session(세션)은 클라이언트와 서버간 상태를 유지하기 위한 기술
  • 일정시간동안 동일한 웹 브라우저(크롬, 사파리 등) 단위로 생성되고 브라우저 종료시 소멸
  • session(세션) 정보는 서버에 저장이 된다 (서버 메모리 사용)
  • 서버자원을 사용하기 때문에, session(세션) 이 많아질수록 부하 또는 자원이 부족해질수 있다
1. 클라이언트가 서버로 request(요청)
2. 서버는 session id 가 있는지 없는지 확인하여, 없으면 session id 를 발급하여 response(응답) -> cookie 를 이용
3. 클라이언트에서 서버로 request(요청) -> 이때 session id 가 쿠키에 저장이 되어있으므로 request header 에 쿠키 정보를 같이 보낸다
4. 서버는 전달받은 쿠키에서 session id 를 통해 구별
5. 서버에서 session 을 사용 또는 갱신 후, 새로운 session id 를 발급하여 response(응답)
  • cookie(쿠키)는 클라이언트와 서버간 상태를 유지하기 위한 기술
  • cookie(쿠키)는 정보를 클라이언트에 저장하며, key : value 형식을 가지고 있다
  • 쿠키는 4kb 제한된 용량을 가지고 있으며, 최대 생성할수 있는 개수도 존재(브라우저별로 상이)
  • 브라우저 종료시 삭제되는 session cookie(세션 쿠키) 와 우리가 일반적으로 사용하는 persitence cookie(지속성 쿠키)가 있다
  • 일반적으로 쿠키는 일정시간 정보를 유지(max-age, expires)
- Response Header 의 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다. 
만들어진 쿠키는 사용자가 요청하지 않아도 브라우저가 매번 Request Header에 넣어서 서버에 전송

Set-Cookie: 키=값; 옵션들

- expires: 쿠키 만료 날짜를 알려줄 수 있습니다.

- max-age: 쿠키 수명을 알려줄 수 있습니다. expires는 무시됩니다.

- secure: https에서만 쿠키가 전송됩니다.

- httponly: 자바스크립트에서 쿠키에 접근할 수 없습니다. XSS 요청을 막으려면 활성화해두는 것이 좋습니다.(클라이언트에서 쿠키에 접근 불가능)

- domain: 도메인을 적어주면 도메인이 일치하는 요청에서만 쿠키가 전송됩니다. 가끔 도메인이 다른 쿠키들이 있는데, 이런 쿠키들은 써드 파티 쿠키로 여러분을 추적하고 있는 쿠키입니다. 구글이나 페이스북같은 곳이 써드 파티 쿠키를 적극적으로 사용합니다.

- path: 패스를 적어주면 이 패스와 일치하는 요청 요청에서만 쿠키가 전송됩니다.

  • 정보 저장위치가 다르다(서버 vs 클라이언트)
  • 속도 -> 쿠키는 빠르고, 세션은 느리다
  • 보안 -> 쿠키는 위험(클라이언트에 정보가 있음) / 세션은 안전(서버에 정보가 있음)
  • 생명주기 -> 세션은 브라우저가 종료되면 사라지고, 쿠키는 설정한 수명에 따라 사라진다.
  • 단, session id 는 쿠키에 저장이 되기 때문에 session id 를 가로채 변조해서 사용할 수 있다.
profile
developer life started : 2016.06.07 ~ 흔한 Front-end 개발자

0개의 댓글