0

我有两台服务器,“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,第一次运行 this 应该是零,它是。在 PHP 脚本的标题中,我看到以下内容:

设置 Cookie:test=ok; 到期=格林威治标准时间 2015 年 10 月 27 日星期二 22:52:52;路径=/; domain=.domain.local X-Powered-By:PHP/5.3.14

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

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

4

2 回答 2

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 ) 

达达!

PS 如果您需要设置它而没有顽皮的人也可以作弊,我不建议您这样做。

于 2013-01-31T00:22:28.363 回答
0

您的代码似乎有问题。在第一行你忘了用 . 关闭你的字符串"

于 2013-01-30T23:18:37.483 回答