Подтвердить что ты не робот

Предоставляя JS или iframe, как аналитика и statcounter, на другую веб-страницу, чтобы удаленно запускать мой PHP + JS script

Как не копировать исходный код на другие серверы и предоставлять им JS или iframe, например, аналитику и statcounter?

Я написал PHP скрипт с JS, в котором базовое описание выглядит следующим образом: Когда кто-то посещает мой сайт, получает куки файл со значением уникальной идентификации и в то же время используя AJAX, я делаю некоторые проверки, и я сохраняю то же значение для mysql соответственно. После этого, если он снова посещает мой сайт (в большинстве случаев), cookie не создается снова.

В глубину:

Значение cookie создается с помощью JS, и я хочу сохранить его таким образом для будущих улучшений.

Мой код (index.php, add-to-mysql.php) имеет JS и PHP.

Я хочу использовать этот script в моих дополнительных доменах, а некоторые из них находятся на другом сервере. Но Я не хочу размещать все мои исходные файлы там.

Идеальным для меня является предоставление им JS-кода, например, аналитики google или statcounter, дающие нам (или альтернативные аналогичные способы) решения iframe..., подобные этим.

Когда посетитель попадет на свою страницу, мой mySQL на удаленном сервере (мой сервер) будет обновлен, и на их сайте будет создан файл cookie. Перенос данных с и на.

Можно ли это сделать? Если да, то как я могу начать учиться на это? Можете ли вы предоставить мне некоторые рекомендации?

Спасибо.

это блок кода, функция ajax, которая помещает случайное число в файл add-to-mysql.php, где я делаю некоторые действия

$.ajax({
    type: 'POST',
    url: 'add-to-mysql.php',
    data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
    success: function(data) {       
        alert("success! X: " + data);
    }
});
4b9b3361

Ответ 1

Мне кажется, у вас есть три варианта.

1. Использовать JSONP

JSONP позволяет выполнять перекрестные вызовы ajax в домене, чтобы вы могли просто звонить на ваш домашний сервер из других доменов, не задерживаясь. Это, наверное, самый легкий путь, о котором я думаю.

См. здесь, чтобы быстро написать о том, как работает JSONP:
fooobar.com/questions/529/...

jQuery поддерживает jsonp, поэтому начинать не сложно:
http://learn.jquery.com/ajax/working-with-jsonp/

JSONP работает, динамически добавляя script к документу, который затем вызывает обратный вызов. Содержимое файла jscript файла должно быть сгенерировано сервером, ваш PHP файл add-to-mysql.php должен будет повторить что-то вроде этого:

<?= htmlspecialchars($_GET["callback"]) =>('someData you want to return');

Вы можете получить доступ к параметру one:, который был передан из jQuery через массив $_GET, так как это всего лишь запрос GET.

С клиентской стороны вы можете вызвать этот маршрут следующим образом: Обратите внимание, что это всегда будет запрос GET, все параметры будут проходить через URL-адрес. Параметр "обратный вызов" является здесь фактором соединения, поэтому он уверен, что сторона PHP знает, какую функцию JavaScript следует создавать.

$.ajax({
    jsonp: 'callback',
    dataType: "jsonp",
    url: 'http://my-server.com/add-to-mysql.php',
    data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
    success: function(data) {       
        alert("success! X: " + data);
    }
});

2. Используйте CORS

CORS позволит вам совершать вызовы ajax в другом домене, а затем тот, где работает JS. Тем не менее, это требует от вас отправлять специальные заголовки http с страницы обслуживания html, поэтому для этого требуется изменить серверы.

См. здесь введение qucik на CORS:

http://www.html5rocks.com/en/tutorials/cors/

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

Access-Control-Allow-Origin: http://domain.com
Access-Control-Expose-Headers: list,of,headers

3. Проводка в iFrame

Проводка через скрытый iFrame также является опцией. Для этого вам нужно установить target из form в name iframe, преимущества здесь в том, что вы также можете использовать POST. Вы можете отправить и заполнить форму через jQuery.

$('#one_input').val('someHash');
$('#myForm').submit();

Вы можете просто поместить все в скрытый div, если вы не хотите показывать его на странице:

<div style='display:none;'>
    <form id="myForm" action="http://my-server.com/add-to-mysql.php" method="post" target="my_iframe">
       <input type="input" id="one_input" value="" />
    </form>
    <iframe name="my_iframe" ></iframe>
</div>

Вы также можете просто установить URL-адрес iframe с вашим параметром, если вам не нужна обратная связь.

var hash = 'stuff';
document.getElementId('one_input').src="http://my-server.com/add-to-mysql.php?one=" + hash;

Extra

вы также можете использовать iframe с Window.postMessage
Основываясь на предыдущем примере:

$('#my_iframe')[0].contentWindow.postMessage('hash', 'my-server.com');

Но для этого требуется, чтобы в вашем iframe была загружена страница, которая затем получит сообщение через JavaScript, поэтому я не думаю, что это то, что вы ищете.

Ответ 2

Google Analytics предоставляет script, который не публикует данные, асинхронно загружает script (это очень важно, чтобы избежать беспорядка с временем загрузки исходного сайта), затем он отправляет всю свою информацию, запрашивающую изображение .gif. Ваш код должен выполнить запрос к URL-адресу, заканчивающемуся на .gif, со всеми данными в форме GET. Сделайте свою магию и верните gif размером 1px * 1px и без содержимого.

Просто попросите что-то вроде этого

yourdomain.com/a.gif?cookie=1234aqfajsdlq....&uid=qekjlajdfa

Поместите все свои данные туда Я рекомендую немного запутать его, но это должно помочь вам избежать cors, iframes или jsop

ИЗМЕНИТЬ

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'id', 'domain');
  ga('send', 'pageview');
</script>

Это было взято из GA. Смотрите, что он создает тег с атрибутом async, чтобы избежать проблем с загрузкой (помните, что скрипты синхронизации останавливают отображение страницы). Затем он создает и массирует, где он толкает всю информацию, которая ему нужна в кортежах. Он определяет ga в окне как функцию, которая подталкивает все свои аргументы к q. Вы можете создать script, который берет все необходимые данные, используя js, cookies, домен и т.д. И отправляя их на сервер. Например, вы хотите, чтобы домен, который посетил пользователь:

//You won't have jquery, but you get the idea
//Create a tag
var i = $('<img>').prop('src', 'yourdomain.com/a.gif?domain' + window.location.origin).css('display', 'none');
$('body').append(i);

В какой-то момент вам придется установить cookie. Я считаю, что cookie не может быть перекрестным доменом, поэтому вы должны устанавливать их в своих запросах не в js. На стороне сервера вы проверяете файл cookie, если его нет, вы создали, и там вы можете отслеживать многие вещи.

Впоследствии ваш script может проверить поддержку cors и использовать ajax без этого. Я не рекомендую JSONP, очень подвержен ошибкам, и на самом деле это хак.

Ответ 3

Чтобы избежать проблем, связанных с перекрестными доменами, вы можете включить iframe на другие сайты, которые загружаются с вашего сайта. Он создает свой собственный домен (domain), и вы можете свободно использовать ajax изнутри, взаимодействуя с вашим сайтом. Однако, если вы установили там файлы cookie, они будут связаны с исходным доменом iframes (ваш домен). Это может быть или не быть проблемой. Обратите внимание, что это можно использовать для идентификации пользователей во всех других доменах, включая этот же iframe (из вашего домена).