2017-01-15 4 views
1

분할 테스트 앱을 디버깅하고 있습니다. 방문수, 순 방문자 수를 추적하고 변수를 표시하며 전환을 추적합니다. 테스트중인 페이지에 JavaScript 파일을로드하여 구현합니다.쿠키가있는 순 방문자를 추적 할 수 없습니다.

자바 스크립트 (및 지원 파일)가 테스트중인 페이지와 동일한 도메인에 있으면 완벽하게 작동하지만 다른 도메인에있을 때 한 가지 기능이 실패합니다. 방문자를 추적하고 변수를 표시하며 전환 수는 이지만 더 이상 번으로는 명의 방문자를 추적하지 않습니다.

추적은 쿠키를 통해 수행됩니다.

tracker.js.php이 settings.php가 (가격)

<?php 
extract($_POST); 

$disabled_text = 'disabled'; 
$settings_file = 'settings.json'; 
$visitor_log_file = 'visitor_log.json'; 
$settings = json_decode(file_get_contents($settings_file), true); 

if(isset($edit)){ 
    $disabled_text = ''; 
} else if(isset($submit)){ 
    $settings['variable_id'] = $variable_id; 
    $settings['target_id'] = $target_id; 
    $settings['price'] = $price; 
    $settings['cookie_id'] = rand(); 
    $settings_json = json_encode($settings); 
    file_put_contents($settings_file, $settings_json); 
    $visitor_log = array(); 
    $x = 0; 
    foreach($price as $each){ 
     $visitor_log[$x]["price"] = $each; 
     $visitor_log[$x]["visitors"] = '0'; 
     $visitor_log[$x]["unique_visitors"] = '0'; 
     $visitor_log[$x]["conversions"] = '0'; 
     $x++; 
    } 
    $visitor_log_json = json_encode($visitor_log); 
    file_put_contents($visitor_log_file, $visitor_log_json); 
} 

extract($settings); 
?> 

변수를 편집하는 데 사용됩니다

function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+d.toGMTString(); 
    document.cookie = cname + "=" + cvalue + "; " + expires; 
} 
function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0; i<ca.length; i++) { 
     var c = ca[i].trim(); 
     if (c.indexOf(name) == 0) return c.substring(name.length,c.length); 
    } 
    return ""; 
} 

function log(log){ 
    console.log(log); 
} 

<?php 
// SETTINGS 
include_once 'settings.php'; 
header('Content-type:text/javascript'); 
?> 

// VISITOR COOKIE 
var cookie_match_id =  '<?php echo $settings['cookie_id']; ?>', 
    cookie_id  =  String(getCookie('id')), 
    price_index  =  getCookie('index'), 
    prices   =  [<?php echo implode(',', $settings['price']); ?>], 
    prices_amount =  prices.length; 

// IF PRICE IS EMPTY, OR COOKIE DOESN'T MATCH, SET IT 
if(!price_index.length || cookie_id!=cookie_match_id){ 
    price_index = ~~(Math.random() * prices_amount); 
    setCookie('index', price_index, 365); 
    setCookie('id', cookie_match_id, 365); 
} 

// STORE 
var price = prices[price_index]; 
$('#random1').html('$'+price); 

// TRACK 
$.get('http://mywebsite.com/track.php', {track:true, variation:price_index}); // track visit 

$('#target1').click(function(e){ 
    e.preventDefault(); 
    $.get('http://mywebsite.com/track.php', {track:true, conversion:true, variation:price_index}); // track conversion 
    return false; 
}); 

추적중인 페이지에 링크 된 파일 track.php 실제로 추적하는 파일

<?php 

header("Access-Control-Allow-Origin: http://client-site.com"); 
header("Access-Control-Allow-Credentials: true"); 

//CONFIG  
include_once 'settings.php'; 
$prices = $settings['price']; 
session_start(); 

//VARIABLES 
extract($_REQUEST); 
$visitor_log = 'visitor_log.json'; 
$visitor_log_contents = file_get_contents($visitor_log); 
$visitor_log_contents = json_decode($visitor_log_contents, false); 

//SAVE SERVER COOKIE 
if(!isset($_SESSION['cookie_id']) || $_SESSION['cookie_id']!=$settings['cookie_id']){ 
    $_SESSION['cookie_id'] = $settings['cookie_id']; 

    unset($_SESSION['visited']); 
    unset($_SESSION['converted']); 
} 

if(!isset($_SESSION['visited'])){ 
    $_SESSION['visited'] = true; 
    $log_visitor = true; 
} 
if(!isset($_SESSION['converted']) && isset($conversion)){ 
    $_SESSION['converted'] = true; 
    $log_conversion = true; 
} 

//LOG 

$price_index = $variation; 
$price = $prices[$price_index]; 
$l = $visitor_log_contents[$price_index]; 
if(!isset($l->visitors))$l->visitors = 0; 
$l->visitors++; //total visits 
if(isset($log_visitor))$l->unique_visitors++; 
if(isset($log_conversion))$l->conversions++; 

$visitor_log_contents[$price_index] = $l; 

// STORE 
$visitor_log_contents = json_encode($visitor_log_contents); 
file_put_contents($visitor_log, $visitor_log_contents); 

?> 

참고 : 쿠키가 고집스럽게 보이는 이유는 쿠키가 사람에게 가격이 표시되면 새로운 pageload가있을 때마다 동일한 가격으로만 볼 수 있기 때문입니다. 그러나 어떤 이유로 든 재 방문자로 기록되지 않고 각 페이지로드마다 새로운 것으로 계산됩니다.

header("Access-Control-Allow-Origin: http://client-site.com");을 추가하여 일부 오류를 줄이려고했지만 문제를 해결하지 못했습니다. 또한 행운없이 track.phpunset 대신 session_unset을 시도했습니다. 많은 시행 착오가 있었지만 효과가 없었습니다. 누군가 도울 수 있습니까?

참고 : 내 평판에 속지 마세요. 저는 총 해킹입니다. 부트 스트랩에 대한 몇 가지 좋은 답변을 모두 얻었습니다.

+0

는'액세스 제어 - 허용 - 자격 증명을 추가해야 할 수도 있습니다 : 사실 '당신의 헤더에도 마찬가지로 – xkcd149

+0

은 슬프게도 아무런 차이가없는 것 같습니다. –

+0

이것은 쿠키 문제 일 가능성이 큽니다. 당신은 페이지에 쿠키 의존적 인 출력을 볼 수 있기 때문에 "sticking"이라고 말하지만 브라우저 설정으로 인해 브라우징 세션 후에 쿠키가 _kept_되지 않는다고 추측 할 수 있습니다. 귀하의 스크립트는 다른 도메인에 있으므로 쿠키는 "제 3 자"쿠키가되며 일반적으로 다르게 취급됩니다. (P3P 정책은 그러한 제 3 자 쿠키를 허용하는 클라이언트의 양을 늘릴 수 있습니다.) – CBroe

답변

0

하나의 도메인과 몇 개의 하위 도메인이 있습니까, 아니면 모든 도메인이 다른가요?

당신이 setCookie 기능에 기본 도메인을 지정해야합니다 하위 도메인을 사용하는 경우 :

setcookie('name', 'value' , 0 , "" , 'domain.com'); 

http://php.net/set_cookie

+0

그들은 모두 다른 도메인에 있습니다. –