Сделать getJSON в JQuery для передачи куки на внешний домен? - PullRequest
3 голосов
/ 14 сентября 2009

Когда я использую getJSON в JQuery для внешнего домена, сделанный запрос не включает файлы cookie для этого домена. Я использую это для своего сценария аналитики, который пишу, и мне нужно установить cookie во внешнем домене, где выполняется скрипт, чтобы я мог отслеживать уникальных посетителей.

Файлы

domain1.com / website.html

    <script src="http://domain2.com/tracker.js"></script>

domain2.com / tracker.js

//Get information about the user
info = "(here's some things about the user)";

//Send data using JSON
$.getJSON("http://domain2.com/getdata.php?"+info,
            function(data){}
         );

domain2.com / getdata.php

 /******
  * Code to save data and stuff
  *******/

//Get the current cookie (if any).
$current_tid = $_COOKIE['tID'];

//checks if the cookie is a string of 50 characters
if (strlen($current_tid)==50){
  $TrackerID = $current_tid; //If the cookie already have a unique string, then use it!
} else {
  $TrackerID = random_gen(50); //Generates a new random string with 50 characters
}

//Set cookie "tID" with the unique variable $TrackerID
setcookie("tID",$TrackerID,time()+60*60*24*365);

Итак, дело в том, что когда пользователь загружает website.html на server1, он также загружает tracker.js на server2, который отправляет некоторые данные с JSON в getdata.php. Однако скрипт не отправляет файлы cookie, и getdata.php будет генерировать новую строку каждый раз при загрузке скрипта.

Можно ли как-нибудь отправить куки с помощью JSON?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

Вы должны использовать JSONP вместо обычного JSON:

В вашем скрипте вы должны добавить это:

$.getJSON("http://domain2.com/getdata.php?callback=?&"+info,
    function(data){}
);

И вместо исходного JSON ваш PHP-скрипт должен вернуть ваш JSON в формате:

header("Content-Type: text/javascript");
$callback = $_GET["callback"];
print "$callback(";
// Code to produce the JSON output as normal
print ");";

Дополнительная информация о JSONP и jQuery доступна здесь .

1 голос
/ 14 сентября 2009

По моему опыту, разрешить / запретить сторонние куки-файлы - это настройка безопасности в браузере, которая по умолчанию блокируется последним сафари (сторонние куки-файлы).

http://www.willmaster.com/library/cookies/setting-a-cookie-on-a-remote-domain.php http://www.bobulous.org.uk/misc/third-party-cookies.html

Вы можете попробовать: 1) Отправьте свою ссылку с сайта www.domain2.com и используйте js для установки этого значения в файле cookie, хранящемся на www.example1.com.

2) При включении вашего скрипта отслеживания обновите его, чтобы отправить через TID, сохраненный в файле cookie www.example1.com, в качестве параметра для включения.

Таким образом, cookie устанавливается на www.domain1.com (поэтому по умолчанию не блокируется). Вам просто нужно написать немного JS для отправки значения cookie TID www.domain1.com в качестве параметра в скрипт отслеживания на www.domain2.com, если значение cookie существует на www.domain1.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...