在两个不同的服务器上通过getJSON调用在PHP中设置cookie

时间:2013-01-30 23:02:26

标签: php jquery cookies setcookie

我有两台服务器,'www.domain.local'和'api.domain.local'。我想在从www调用的api服务器上的脚本中设置一个cookie。 Chrome不允许我这样做(还没有尝试其他浏览器)

我的PHP代码:

header("Access-Control-Allow-Origin:*");
echo json_encode(array("cookie"=>print_r($_COOKIE,true)));
setcookie("test","ok",time()+24000*3600,"/",".domain.local");

在我的jQuery中:

$.getJSON("http://api.domain.local/test.php",{
  command:"setcookie"
},function(fb){
  alert(fb.cookie);
});

PHP首先返回它拥有的cookie,第一次运行应该为零,它就是。在PHP脚本的标题中,我看到以下内容:

  

设置Cookie:测试= OK;到期=星期二,2015年10月27日22:52:52 GMT;路径= /; domain = .domain.local X-Powered-By:PHP / 5.3.14

这是我的期望。但是没有设置cookie。当我再次运行jQuery时,我期待设置cookie(使用$ _COOKIE的print_r获取警报),但我什么都没得到。我在Chrome调试部分的网络资源的“cookies”选项卡中注意到的一件事是,到期时间设置为“无效日期”。如果我直接运行PHP脚本,我没有这个问题。

是否可以在从jQuery调用的PHP脚本中设置cookie,如果是,如何设置?

2 个答案:

答案 0 :(得分:2)

让我们看看,在一个不同的域上设置一个cookie到页面正在加载的域,在PHP中从jQuery

有人可能会发布你应该如何做到这一点。 我可能只是作弊。

www.domain.local / test.html 包含

$.getScript("http://api.domain.local/test.php?dowhat=setcookie");

api.domain.local / test.php

<?php
switch ($_GET['dowhat']){
    case 'showcookie':
        print_r($_COOKIE);
        break;
    case 'setcookie':
        setcookie("test",date('Y m D H:i:s'),time()+24000*3600,"/");
        break;
}
header("Content-type: application/javascript"); // may as well, it expects this
die;

现在转到http://api.domain.local/test.php?dowhat=showcookie

Array ([test] => 2013 01 Thu 00:20:52 ) 

钽哒!

P.S。我不建议这样做只是如果你需要设置它而没有一个顽皮的人也可以作弊。

答案 1 :(得分:0)

您的代码似乎存在问题。在第一行,您忘记使用"关闭字符串。