【问题标题】:Make getJSON in JQuery to pass cookies to external domain?在 JQuery 中制作 getJSON 以将 cookie 传递给外部域?
【发布时间】:2010-11-28 02:52:37
【问题描述】:

当我在 JQuery 中对外部域使用 getJSON 时,发出的请求不包括该域的 cookie。我将它用于我正在编写的分析脚本,我需要在脚本运行的外部域上设置一个 cookie,以便跟踪唯一访问者。

文件

domain1.com/website.html

domain2.com/tracker.js

//获取用户信息 info = "(这里是关于用户的一些事情)"; //使用JSON发送数据 $.getJSON("http://domain2.com/getdata.php?"+info, 函数(数据){} );

domain2.com/getdata.php

/****** * 代码保存数据和东西 *******/ //获取当前的cookie(如果有的话)。 $current_tid = $_COOKIE['tID']; //检查cookie是否为50个字符的字符串 如果 (strlen($current_tid)==50){ $TrackerID = $current_tid; //如果cookie已经有一个唯一的字符串,那么就使用它! } 别的 { $TrackerID = random_gen(50); //生成一个新的50个字符的随机字符串 } //使用唯一变量 $TrackerID 设置 cookie "tID" setcookie("tID",$TrackerID,time()+60*60*24*365);

所以,当用户在 server1 上加载 website.html 时,用户也会在 server2 上加载 tracker.js,它将一些带有 JSON 的数据发送到 getdata.php。但是,该脚本不会发送 cookie,并且每次加载脚本时 getdata.php 都会生成一个新字符串。

有没有办法使用 JSON 发送 cookie?

【问题讨论】:

  • 通过打印整个 cookie 数组 (print_r) 来检查问题是否实际上是 cookie,或者是否是其他问题

标签: php jquery ajax json


【解决方案1】:

您应该使用 JSONP 而不是常规 JSON:

在你的脚本中你应该添加这个:

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

您的 PHP 脚本应该以以下格式返回 JSON,而不是原始 JSON:

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

More info on JSONP and jQuery is available here.

【讨论】:

    【解决方案2】:

    根据我的经验,允许/禁止 3rd 方 cookie 是浏览器中的一项安全设置,最新的 safari 默认会阻止它(第 3 方 cookie)。

    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 包含发送你的 tid,并使用 js 将这个 tid 值设置在存储在 www.example1.com 上的 cookie 上。

    2) 包含您的跟踪脚本时,更新它以通过存储在 www.example1.com 的 cookie 中的 TID 作为包含的参数发送。

    这样 cookie 在 www.domain1.com 上设置(因此默认不会被阻止)。如果 cookie 值存在于 www.domain1.com 上,您只需要编写一些时髦的 JS 将 www.domain1.com TID cookie 值作为参数发送到 www.domain2.com 上的跟踪脚本。

    【讨论】:

    • 嗯...我有点喜欢你的想法,我刚刚想出了非常好的编码方式!谢谢!
    • 我认为这可能是跨域存储 cookie 数据的最可靠方法,并且不会被默认浏览器设置(阻止 3rd 方 cookie)阻止,而原始 jsonp 会受到影响。如果有人知道更可靠的方式来存储第 3 方数据,请告知。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多