본문 바로가기
javascript

[웹 기본개념] 세션

by jinbro 2017. 4. 5.

[목표]
- 세션과 쿠키의 필요성 인지하기
- 쿠키와 세션의 차이를 이해하기
- 내가 사용하고 있는 서버언어의 쿠키, 세션 이용방법 찾아보기


[세션이란]
- 쿠키보다 안전하고, 조금 더 많은 정보를 저장할 수 있음
- 쿠키가 클라이언트 측(웹브라우저)에 이전 통신 정보를 저장하는 것(HTTP 통신은 이전 통신 상태, 정보를 알지못함) : 장바구니, 로그인 정보 등

- 쿠키 보안 이슈 
(1) 사용자의 웹브라우저와 서버가 통신하는 과정에서 중요한 정보(로그인시 아이디 비밀번호)가 왔다갔다하는데 중간에 탈취가능성 
(2) 클라이언트 컴퓨터 해킹 - 쿠키 정보 탈취 가능성

- 세션 
(1) (쿠키 방식 + 서버 측 db에 정보 저장) 혼용
(2) 쿠키 방식  - 브라우저 저장(사용자 식별자값만 저장), 실제 값(비밀번호)은 서버 db에 저장, key - value 방식
- 쿠키 보안 이슈 해결 : 식별자값이 탈취된다하더라도 쿠키보다는 보안이슈가 적게 발생하도록 조치(실제 값이 들어있지않음)


[쿠키 확인] : 직접 구현해보지 않는다면 모름
- 최초(쿠키가 세팅이 되지 않았을 때) HTTP 통신 시 서버가 브라우저에 응답할 때 브라우저에 쿠키를 세팅하라고 함
- 이후 저장된 정보(쿠키)를 웹브라우저가 요청 시 서버에 보내고 서버는 정보를 확인한 후 응답함(이전 상태 정보 그대로 응답 때 요청한 페이지에 표시해서 돌려줌)
- 확인하기
(1) 크롬개발자도구 켜기 > Network 탭 이동
(2) 네이버 요청 날리기(네이버 접속)
(3) 응답 파일 목록 중 www.naver.com 페이지 파일 클릭 > Response Headers 내 Set-Cookie - 쿠키 세팅 


[세션 확인]
- 쿠키 확인과 마찬가지임 : 쿠키 방식을 쓰기때문에
- 그러나 쿠키가 이전 상태 정보를 모두 저장했다면, 세션에서 쿠키에는 식별자 정보만 가지고 있음
- 서버가 브라우저에게 식별자 정보를 던져줌, 이후 브라우저가 서버에 요청할 때에는 식별자 정보만을 넘겨줌
- 서버는 요청시 받은 식별자 정보를 가지고 정보를 찾은 후(db에 접근) 응답 시 그에 맞는 응답을 함 

- 확인하기
(1) 크롬개발자도구 켜기 > Application 탭 이동
(2) 네이버 접속(서버에 요청)
(3) Application 탭 내 Storage > Cookies > http://www.naver.com 클릭 > Value(식별자값)
    => 모든 것이 세션을 위한 쿠키가 아닐 수 있으나 동작 매커니즘 확인을 위해 그렇다는 것 알림

- 정리
1) 쿠키에 저장된 값 - 사용자가 현재 쓰고 있는 브라우저 식별자 - 같은 브라우저일 경우 그에 맞는 응답을 해줌
2) 쿠키 저장값(사용자 식별자값) - 서버 db 측 db(실제값) : key - value 관계
3) 실제 값이 브라우저에는 저장되지않기 때문에 크롬의 경우 시크릿창을 켜면 페이스북 로그인이 풀려있음(자동로그인 되어있던 것이)


[결론]
- HTTP는 상태 비저장 프로토콜 : 이전 통신에 대한 상태 정보를 저장하지않음(요청 - 응답만 하는 것 : 이전 통신 정보가 무엇이었는지 모름)

- 쿠키와 세션은 보안의 차이
(1) 쿠키는 클라이언트 측(웹브라우저)에 모든 정보를 저장해두고 요청 시 서버에 건네주는 것
(2) 세션은 클라이언트 측에 사용자 식별자값만 저장하게 해두고 브라우저가 요청 시 식별자값을 날리면 식별자값을 통해 실제값 정보를 찾고(db에 저장된) 그에 맞는 응답을 해줄 때 사용
(3) 세션은 쿠키를 이용하지만 중요한 정보(실제값)를 어디에 저장하는가가 쿠키와 다름
(4) 현재 브라우저 로그인 체크
4-0) 서버 상에서 세션 스토어 내(세션을 저장하는 공간, 세션 저장 방식에 따라 저장기간이 다름)에 현재 브라우저의 세션이 생성됨
4-1) 현재 브라우저 최초 로그인 성공 시(요청 - 응답) 서버로부터 토큰 발급(쿠키로 - 브라우저 저장)받음
4-2) 이후 http 통신 요청 시 브라우저에서 토큰을 날림
4-3) 서버는 토큰 확인 후 정보 뽑아낸 후 그에 맞는 페이지로 바꾼 후(로그인 -> 로그아웃) 브라우저에 응답
4-4) 브라우저에 유저 정보(비밀번호)를 저장하지않고도 이후 http 통신 때 계속해서 유저정보를 유지한채로 통신할 수 있음

- 레일즈(ruby) 쿠키, 세션 세팅 방법 : http://destiny738.tistory.com/542 (간단하게만 알아봄, 자세한 사항 구글링할 것)

- express(node.js) 쿠키 / 세션 : http://expressjs.com/ko/api.html (ctrl + f > cookie 검색), https://github.com/expressjs/session



댓글