마스터욱 6 746 0 0

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

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

뭐 접속정보에 대한 정보는 에이젼트(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 는 안되면서 이건 되는걸까?

 

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

Comments [6]

비회원
chrome 버전 51 이상부터 이벤트내에 alert, redirect를 무시한다고 하네요.
10 마스터욱
답변      추천 
좋은정보 감사합니다.
비회원
그런데 이건 페이지 이동도 이탈로 보는데요..
완전히 사이트 이탈을 뜻하는건 아닌듯 하네요..
10 마스터욱
답변      추천 
제가 원하는 것이 그 해당 페이지만 이탈하면 되는것이었습니다.
비회원
음....저는 페이지 호출이 안되는것 같은데 뭐가 문제일까요...

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

test.php 페이지가 호출되는지 디버깅해보고 있는데 전혀 호출이 안되네요...

test.php 페이지에서 어떤 작업을 해줘야하나요?
10 마스터욱
답변      추천 
fopen 구문으로 파일을 생성하는 소스코드를 넣어뒀습니다. 파일이 정상적으로 생성되면 test.php 가 호출이 된 걸로 판단하는 거죠~

제목 글쓴이
PHP 숫자 0 을 인식하는 방법 마스터욱
텔레그램 채널 알림(푸시) API 마스터욱
apmsetup 대신에 쓸만한 프로그램, 오토셋(Autoset) 댓글 2 마스터욱
파생상품 거래란? 댓글 1 비회원
jQuery ezPlus 그누보드 상세페이지 이미지에 적용소스 마스터욱
bitmex API - 주문리스트 가져오기(order list) 마스터욱
bitmex API - 주문하기(order) 마스터욱
CI(코드이그나이터) 세팅정리 마스터욱
PHP 사진파일의 GPS 좌표값 뽑아내기 마스터욱
CIBoard(코드이그나이터) 에서 접속통계 쌓지 않는 방법 마스터욱
CI(코드이그나이터) 컨트롤러 바로 호출하기 마스터욱
구글지도 API를 이용한 좌표값 -> 주소문자열 가져오기 마스터욱
날짜정보 리턴 마스터욱
imagecreatefrompng 가 안 먹던 현상 해결 마스터욱
CI(코드이그나이터) 의 템플릿 파일에서 모델(Model) 호출하기 마스터욱
자주 사용하는 정규식 마스터욱
스마트폰으로 찍은 사진의 회전을 자동으로 되돌려주는 소스 마스터욱
php library - pdfparser   마스터욱
스마트에디터에서 아이폰으로 이미지 업로드시에 상하/좌우 회전이 되던 현상 수정방법 마스터욱
코드이그나이터(CI) 쿼리 확인방법 마스터욱
카테고리