웹스쿨

php로 사이트 체류시간 구현하기 본문

개발 경험 Tip/PHP

php로 사이트 체류시간 구현하기

마스터욱 2023. 3. 31. 00:20
반응형

로그 프로그램을 만들어야 했다.

사이트에 접속한 사람이 어떤 페이지를 방문했고, 그 페이지에 얼마의 시간동안 체류했고, 검색키워드는 뭘로 타고왔고, 브라우저는 뭐고 기타등등...

뭐 접속정보에 대한 정보는 에이젼트(AGENT)값과 레퍼러(REFERER)값을 체크하면 되니 문제가 전혀 될것이 없었다.

내가 고민하는 것은 단하나 "체류시간"뿐이었다.

 

어떻게 이 체류시간을 계산하느냐...

체류시간을 구하는 알고리즘은 간단하다. 페이지 진입시간과 나가는시간만 알면된다.

진입시간은 전혀 문제가 되지 않는다.

문제는 나가는시간이다.

들어오는건 명확한데 나가는건 상황이 다르다.

아래는 나가는 상황을 생각난대로 적은것이다.

 

1. 특정링크로 사이트를 떠나거나

2. 브라우저를 닫거나

3. 윈도우를 종료하거나

4. 전기가 나간다거나

 

위 상황시에 특정 이벤트가 발생이 되어, 나가는시간을 데이터베이스에 남겨야만 한다.

 

진짜 무식하게 ajax로 5초동안 1번씩 실행하면서 해당 페이지가 살아있는지 호출해볼까? 라고도 생각했었는데 이건 정말 최후의 수단으로 남겨두기로 했다.

 

이것말고 생각나는 방법이라고는, 자바스크립트의 window.beforeunload 뿐이었다.

하지만 이 beforeunload 가 제대로 실행되지 않았다. 링크를 타고 이동하거나, 브라우저를 닫아도 실행되지 않았다.

이유는 모르겠다. alert 를 띄워도 실행되지 않았다.

beforeunload 안의 함수내용이 실행되기도 전에 브라우저가 닫혀 버려서 그러나...

 

하지만 구글링 끝에 아래의 주옥같은 소스를 발견할 수 있었다.

  1. window.addEventListener('beforeunload'function(e) {
  2.     (new Image()).src = "test.php?type=start3";
  3. });

 

뭐 가상의 이미지를 하나 만드는데 그 이미지 경로를 php 파일로 호출하는 것같다.

이렇게 하니까 기가막히게 test.php 가 실행이 됨을 확인했다.(test.php 안에 파일생성 소스 넣어둬서 확인함.)

 

어떻게 alert 는 안되면서 이건 되는걸까?

 

정말이지 자바스크립트는 경험의 짬빱을 이길 수 없는 영역인거 같다.


이 게시글은
https://webschool.kr/?v=board_view&board_key=7&idx=581
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.

반응형