Network/Network

[HTTP] 쿠키와 세션

양디 2016. 2. 27. 17:10


이 쿠키가 아닙니다.


HTTP Stateless


저번에 포스팅했듯이, HTTP는 Connectionless 하며, Stateless 한 프로토콜이었다.


그러한 점들이 인터넷을 활용하는 데에 있어서 큰 문제점이었다.


쿠키와 세션은 그러한 문제점들을 해결하고자 나온 방법들이다.


인터넷에는 일반적으로 권한의 제한 없이 구할 수 있는 정보들도 있지만, 권한이 필요한 경우도 많다.


예를 들어 이메일을 확인한다던지, 회원제의 게시판을 이용한다는지의 경우에는 로그인 정보 가 필요하다.


그러나 HTTP는 Stateless이므로, 로그인 정보를 저장할 수가 없다.


만약 쿠키가 없었다면, 우리는 게시판 글 하나를 볼때마다 계속해서 로그인을 해주어야 했을지도 모른다.

ex) 회원제 게시판에서 글 읽기 Request -> 서버는 로그인 정보 달라고 Response -> 로그인 정보 Request -> 글 정보 Response

-> 다른 글 읽기 Request -> 서버는 로그인 정보 달라고 Response -> 로그인 정보 Request -> .........


위와 같은 예처럼, 계속해서 로그인정보가 필요했을지도 모른다.


쿠키 (Cookie)


쿠키는 클라이언트의 컴퓨터에 파일로 저장되는 State 정보이다.

위의 회원제 카페에서, 로그인 정보를 Request 할 때에 그 정보를 쿠키에 저장하고, 로그인 된 정보를 게시글을 읽을때마다 함께 보내준다.

그럼 서버는 해당 쿠키를 통해서 클라이언트의 정보를 알게 되고, 원활한 통신이 가능해진다.

지금도 많이 쓰이고 있는데, 세션 아이디를 저장하는 용도, 클라이언트의 각종 접속 정보를 저장한다거나,

아이디 저장 / 자동 로그인 등의 체크박스 정보를 저장하는데 쓰인다.

그러나 쿠키는 클라이언트의 컴퓨터에 파일 형태로 존재하기 때문에, 해킹의 위험성이 크다.

누구나 쿠키를 찾아서 열면 로그인 정보를 찾을 수 있었다. 

이전에는 이러한 문제로 PC방에서 로그인을 한 경우 해킹을 당하는 경우가 종종 있었다.

이러한 문제점을 해결하기 위해 나온 것이 세션이다.

세션 (Session)


세션은 서버의 메모리에 저장되는 정보이다.

쿠키와 똑같이 State를 저장하나, 저장되는 위치가 클라이언트가 아니라 서버의 메모리 부분이라는게 다르다.

서버의 메모리는 서버에서만 읽고 쓸 수 있다. 따라서 일반 사용자에게 각종 인증 정보를 노출하지 않기 때문에 보안의 문제를 해결한다.

서버는 접속한 클라이언트마다 세션을 할당한다. 

하나의 세션은 하나의 클라이언트마다 할당되며, 해당 세션에는 각종 인증 정보들이 들어가 있다.

서버는 클라이언트에게 세션 정보를 기억할 수 있도록 세션 ID를 제공해준다. 

이 세션 ID는 서버마다의 방식으로 암호화된 코드이다.

세션은 일정 시간이 지나면 초기화될 수 있도록 하여야한다.

세션을 사용할 경우에도, 세션의 ID는 쿠키로 저장하여야 한다.

그래야 클라이언트가 서버에게 ID를 보내고, 해당 ID의 세션 정보를 통해서 Response할 수 있다.

이런 세션을 훔치는 방법들도 존재한다. 나중에 직접 해보자.




댓글