사이드바 영역으로 건너뛰기

쿠키를 이용한 방문자수 올리기

방문자 수를 카운팅하기 위해 여러가지 방법이 있겠지만, 가장 쉽고 많이 사용하는 방법은 쿠키를 이용하는 것입니다. 물론 페이지를 읽을 때마다 카운터를 올려주면 쿠키까지 필요 없을지 모르겠지만, 보다 정확하게 방문자 수를 측정하기 위해서는 별도의 처리가 필요합니다. 예를 들면, 한 번 블로그에 들어온 유저가 얼마 되지 않는 시간 내에 다시 들어올 때 방문자 수는 올라가지 않는다, 또는 주인장이 들어오면 방문자 수는 올라가지 않는다 등의 처리가 필요한 것이죠. 이 중에서 전자의 문제를 해결하기 위해 쿠키를 사용합니다. (쿠키에 대한 설명은 이전 포스트를 참고하세요)

 

먼저 특정 사용자 레니가 진보네의 블로그에 들어오면, 웹브라우저는 blog.jinbo.net/jinbone에 대한 쿠키를 웹서버에 날려줍니다. 만약 모든 쿠키를 삭제한 상태라고 가정하면 웹서버는 아무런 쿠키 정보를 받지 못하게 되죠. 이런 경우, 쿠키가 없음을 확인했으므로 웹서버는 방문자 수를 하나 올린 후, 레니의 PC에 페이지를 전달하기 전에 blog.jinbo.net/jinbone에 대한 쿠키를 심습니다. 이름은 "curr_redlog", 값은 "jinbone"로 말이죠. 이 쿠키는 다음에 레니가 다시 진보네 블로그에 들어올 때 웹서버에 전달되게 되고, 웹서버는 이번엔 쿠키가 있으므로 방문자 수를 올리지 않습니다.

 

그런데 이렇게만 동작하게 된다면 문제가 생길 수밖에 없습니다. 다음 날 레니가 진보네를 방문하더라도 방문자 수가 올라가지 않을테니까요. 이를 위해 쿠키의 expires를 이용합니다. 쿠키는 한 번 생기면 PC를 포맷할 때까지 남아있을 수도 있지만, 임의로 소멸시기를 정해줄 수도 있습니다. 이를테면 세션 쿠키 같은 정보들은 대부분 브라우저를 종료하는 시점에서 삭제되도록 되어 있고, 소멸시기는 쿠키가 담고 있는 정보의 속성에 따라 결정하기 마련이죠. 방문자 카운팅을 위한 쿠키인 "curr_redlog"는 다시 방문자 수를 올려주는 시점에 따라 소멸시기를 정하면 되겠죠. 진보블로그에서는 1시간을 그 시점으로 정했으므로, "curr_redlog"는 쿠키가 생성된 후 한 시간 후면 사라지게 됩니다. 따라서 레니가 다음날 진보네를 방문하면 쿠키는 삭제되고 웹서버에 아무런 쿠키 정보를 보내지 않게 되므로, 웹서버는 다시 방문자 수를 올려주고 새로운 쿠키를 심게 됩니다.

 

그런데 이러한 속성을 이용해 방문자 수를 쉽게 올릴 수 있습니다. 쿠키가 삭제되는 시기를 판단할 때 웹브라우저가 기준으로 삼는 시간은 당연히 사용자의 PC에 설정된 시간입니다. 하지만 정작 쿠키를 심는 주체는 웹서버이므로, 쿠키의 소멸시기는 웹서버에 설정된 시간을 기준으로 정해지게 되죠. 그렇다면 2005년 7월 26일 오후 1시라고 가정하고 사용자의 PC 시간을 한 달 후로 세팅한다면 어떻게 될까요? 웹서버에서는 자신의 시간보다 한 시간 후인 2005년 7월 26일 오후 2시를 소멸시기로 하여 쿠키를 심게 됩니다. 여기서 1분 후에 다시 같은 블로그를 방문한다면, 웹브라우저는 PC에 설정된 시간인 2005년 8월 26일 오후 1시 1분을 기준으로 쿠키를 삭제하므로 2005년 7월 26일 오후 2시가 소멸시기인 쿠키는 삭제됩니다. 이 경우 웹서버에서는 쿠키정보가 날아오지 않으므로 어이없게도 카운터를 하나 올려주게 되는 것이죠. ^_^;;;

 

이런 방법을 통한 방문자 수 조작을 막으려면 쿠키의 소멸시기를 정해주지 말고 따로 서버 시간을 쿠키에 심어주면 되겠죠. 이와 관련하여 방문자 수 계산 방식을 조만간 개선할 계획이지만, 물론 그렇다고 하더라도 사용자가 쿠키를 삭제해 버리면 방문자 수는 올라가겠죠.ㅎㅎ

 

이를 악용하면-_- 방문자 이벤트 등에서 부당한 이득을 챙길 수도 있겠습니다만.ㅋ 그런 블로거는 없으리라 믿습니다. :D

 

2005.07.29 추가

방문자 수 계산 방식을 변경했기 때문에, 위에서 설명한 방식으로는 방문자 수를 올릴 수 없습니다. 쿠키를 지우고 페이지를 로딩하면 가능하지만요.ㅎㅎ

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크