session과 cookie
25 Jun 2018 | python pycharm개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)
session
http연결은 불연속적으로, http를 통해 우리가 여러번 요청을 보내도 서버에서는 우리가 보낸 사실을 모른다. 정확히는 ip주소는 같겠지만 그 사용자가 같은건 아니니까 서버입장에서는 어떤 사용자가 지속적으로 요청을 보내는 지를 알아야 하고 클라이언트 입장에서도 서버에 그걸 알려줘야 하는데 이를 알려주는 기법을 서버쪽에서는 세션이라고 한다.
session을 유지한다는 것은 연속성을 유지한다는 것을 의미한다.
-> cookie 기반 사용자 session
cookie
http의 규격중 하나로, 사용자가 어떤 웹사이트를 방문할 경우에 그 사이트가 사용하는 서버를 통해서 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보파일을 일컫는다. 서버쪽에서 우리가 http response를 돌려주는데 (서버쪽으로 오는게 request) 이 request를 통해서 우리는 브라우저에 response를 돌려주는데 그 돌려주는 과정에서 쿠키라는 것을 담아라라는 명령을 보낼 수 있다. (http 메시지에)
그래서 특정 값을 서버쪽에서 요청이 왔을때 그 요청에 대해서 이 사용자는 이제 ABC라고 하면 (서버 쪽에 이 내용을 저장을 해놓고) 이 ABC라는 텍스트를 브라우저 쿠키공간에 저장을 하라고 보내면 그 브라우저는 자신의 쿠키를 저장하는 공간에 url과 같이 저장을 한다.
그러고 localhost:8000에서 어떤 요청이 왔는데 ABC라는 것을 저장을 해놓으라는 명령이 왔고 다음번에 똑같은 localhost:8000으로 똑같은 요청을 보낼때는 로컬에 있는 쿠키목록을 그대로 다 보낸다.
브라우저 -> 로그인요청(username, password 요청을 한다) -> 서버
-> authentication(인증)
주어진 username/password에 해당하는 유저가 있는지 검사
-> 인증에 성공하면, 그 사용자에 해당하는 "특정값"을 DB에 저장
-> "특정값"을 http response에 Set-Cookie헤더로 담아 전송
-> 브라우저는 response를 받고, Set-Cookie헤더에 담긴 내용을 쿠키 저장공간에 저장
-> 이후 브라우저 -> 서버로 가는 모든 요청에 쿠키저장공간에 있는 특정값을 함께 보냄
-> 서버는 받은 request에 특정값이 있는 지 검사, 특정 유저에 매칭이 되는 같은 유저가 요청을 보냈다고 간주
해설
브라우저에서 서버에게 로그인을 하겠다고 요청을 보내는 것은 username과 password를 요청한다는 의미로 서버가 이를 받으면 일단 authentication을 거친다
(인증을 거친다는 것은) - 서버쪽에서 주어진 username/password에 해당하는 유저가 있는 지 검사하는 의미로 인증에 성공을 하면 사용자에 해당하는 특정값을 DB에 저장한다. (세션을 유지한다는 표현 -> 세션값을 저장한다라고 표현한다.)
DB에 저장을 하고나면 특정값을 HTTP response에 Set-Cookie헤더로 담아 (Ser-Cookie 헤더라는 것은 브라우저에게 이런 쿠키를 너가 세팅을 해라라는 것) 전송을 하면 브라우저가 이를 받겠고 담긴 내용을 쿠키저장공간에 저장을 한다. 이후 브라우저에서 서버로 가는 모든 요청에 쿠키 저장공간에 있는 특정값을 함께 보내게 되어진다.
그러면 서버는 받은 request에 특정값이 있는지를 검사하고 그게 특정 유저에 매칭이 되면 같은 유저가 요청을 보냈다고 간주한다.
그래서 우리가 admin 페이지에서 아무 셋팅을 하지 않았음에도 로그인을 하고 가만히 있어도 계속해서 로그인이 유지가 되는 이유가 바로 이것이다.