세션과 쿠키는 웹 서비스와 떼놓을레야 떼놓을수 없는 관계라고 할 수 있을 것이다. 많은 용도로 쓰이고, 많은 것들을 할 수 있는 것들이 세션과 쿠키이기 때문인데, 그 세션과 쿠키에 대해서 추가적으로 설명한다.
쿠키는 지정된 내용을 클라이언트 측의 컴퓨터에 남겨놓고 사용하는 데이터이다. 마치 남아있는 것이 과자 부스러기 같다고 쿠키라고 부르게 되었는데, 사용하기 좋기 때문에 많은 웹사이트에서 사용하고 있다. 하지만 쿠키만 사용하기에는 치명적인 결함이 존재한다. 바로 클라이언트에 저장된다 라는 점인데, 이 것은 클라이언트에서 자유롭게 수정이 가능하다는 말이다. 쿠키는 단순히 데이터를 가지고 있기 때문에 악성코드가 될 수도 없고, 소프트웨어처럼 동작할 수도 없다. 하지만 그렇다고 이 것을 막 쓰도록 남겨두어도 된다는 말은 아니다. 쿠키를 변조하거나 훔쳐낼 경우 다른 사람에 계정에 접근이 가능한 경우가 많고, 변조를 통해 많은 장난을 칠 수 있기 때문이다.
쿠키는 웹 브라우저와 서버가 같이 동작한다. 서버에서 쿠키를 설정해서 주기도 하고, 클라이언트에서 쿠키를 설정하기도 한다. 그렇게 쿠키를 설정하고 나면 클라이언트는 서버에 요청을 할 때마다 그 도메인에 해당하는 쿠키를 같이 넘긴다. 그리고 다시 서버에서 응답이 올 때 쿠키를 수정하거나 쿠키를 삭제하거나 등등의 일을 하기도 한다.
일단 먼저 서버에서 쿠키를 설정할 수 있다고 했다. 그럼 PHP에서도 쿠키는 설정이 가능할 것이다. PHP 에서의 쿠키의 사용에 대해서 PHP.net - cookies 와 같이 잘 설명된 문서를 참고하길 바란다.
클라이언트에서도 쿠키를 설정할 수 있는데, 그 일을 JS 로 한다. 그렇다면 JS 로 쿠키를 설정하는 것은 어떻게 할까? 그 것에 대한 설명은 w3schools.com - cookies 에 잘 나와있다. php.net 의 경우보다 조금 더 상세한 설명과 많은 예제가 있으니 잘 참고하길 바란다.
세션도 상당히 중요한 역할을 하고 있는데, 무엇인지부터 살펴보자.
세션은 쿠키의 서버버전이라고 이해하면 쉬울 것이다. 쿠키는 클라이언트에 저장되는데, 세션은 서버에 저장되는 정보이다. 세션이 그렇다면 무엇이 누구의 것일지 헷갈릴 것 같지만 그렇지 않다. 그 세션을 누구의 것인지 식별하는 방법이 다 있고, 구현하는 방법은 언어마다 차이가 있기때문에 이것이다라고 언급은 하지 않는다.
근데 왜 사용될까. 일단 http 통신은 한번 통신하고 끊어지는 통신이다. 한번 응답을 받고나서 반드시 연결이 끊어진다. 그렇다면 예로 로그인을 했다고 해보자. 로그인을 했는데, 첫 통신에서는 올바른 id 와 pw 가 넘어왔으니 당신이 그 계정의 소유주인 것을 웹 서비스가 알아차렸다. 하지만 그 다음 통신(페이지를 이동했거나, 새로고침을 했다고 해보자.)에서는 이미 연결이 끊어진 상태고 당신이 그 계정의 소유주란 것을 다시 알 방법이 없다. 그래서 사용되고 있는 것이 세션이다. (물론 쿠키로도 가능한 방법이다. 하지만 저장되는 곳, 사용되는 방법이 달라 이러한 예를 든 것 이해해주었으면 한다.)
php 에서 세션을 사용하는 방법은 역시 php.net - session 에서 너무 잘 설명했다. 공식적인 사이트에서 설명을 해놓았는데, 추가적인 설명을 하다가 오히려 올바르지 않은 정보를 알려줄 것 같아서 공식적인 문서를 참고했으면 한다.