Nano Hash - криптовалюты, майнинг, программирование

Не удается отследить уникальных посетителей с помощью файла cookie

Я отлаживаю приложение для сплит-тестирования. Он отслеживает посещения, уникальных посетителей, представляет переменную и отслеживает конверсии. Это реализация путем загрузки файла JavaScript на тестируемую страницу.

Когда JavaScript (и вспомогательные файлы) находятся в том же домене, что и тестируемая страница, он работает отлично... но когда они находятся в разных доменах, один аспект терпит неудачу: он по-прежнему отслеживает посетителей, показывает переменную и отслеживает переходы, < strong>но больше не отслеживает уникальных посетителей.

Отслеживание осуществляется через куки.

tracker.js.php это файл, связанный с отслеживаемой страницей.

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;
});

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);
?>

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);

?>

ПРИМЕЧАНИЕ. Похоже, что файл cookie прилипает, потому что часть его работы заключается в том, чтобы после того, как человеку будет показана цена, он будет видеть только ту же цену при каждой новой загрузке страницы, что работает. Но по какой-то причине они не регистрируются как вернувшиеся посетители и учитываются как новые при каждой загрузке страницы.

Я попытался добавить header("Access-Control-Allow-Origin: http://client-site.com");, что уменьшило количество ошибок, но не решило проблему. Также пробовал session_unset вместо unset в track.php безуспешно. Много других проб и ошибок, которые не сработали. Кто-нибудь может помочь?

ПРИМЕЧАНИЕ. Не ведитесь на мою репутацию — я настоящий халтурщик — я получил все это благодаря нескольким хорошим ответам о Bootstrap.


  • Возможно, потребуется добавить Access-Control-Allow-Credentials: true в ваши заголовки. 17.01.2017
  • вроде без разницы, к сожалению 17.01.2017
  • Скорее всего, это проблема с файлами cookie. Вы говорите, что он «зависает», потому что вы можете видеть результат, зависящий от файла cookie, на странице, но я предполагаю, что файл cookie не сохраняется после сеанса просмотра из-за настроек браузера. Поскольку ваш скрипт находится в другом домене, его файлы cookie становятся «сторонними» файлами cookie и обычно обрабатываются по-разному. (Политика P3P может увеличить количество клиентов, которые принимают такие сторонние файлы cookie.) 17.01.2017
  • Я проверил свои файлы cookie в настройках, и они остаются. Также перезапустил браузер и, конечно же, вот они... 17.01.2017

Ответы:


1

У вас один домен и несколько поддоменов или все домены разные?

Если вы используете поддомены, вам нужно будет указать свой основной домен в функции setCookie:

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

http://php.net/set_cookie

17.01.2017
  • они все в разных доменах 17.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..