我无法使用 jsonp 从域 A 到域 B 获取 cookie 信息。我已经让它适用于 Chrome 和 Firefox 等,但对于 IE 它不起作用。我正在执行从域 B 到域 A 的 jsonp 请求,该请求通过域 A 上的 php 在其中设置一个 cookie,然后我再次检查来自 B 的相同 cookie。然后将 cookie 中的信息打印到屏幕(域 A),以便我可以从域 B 中获取该信息并在那里设置一个反映该信息的 cookie(我知道安全风险,我不想同步敏感信息这里的信息,只是一个设置)。
所以,如前所述,这适用于 FF、Chrome 等。但在 IE 上,我看到只返回会话 cookie,而我设置的 cookie 不是(也不应该是)。
任何线索这里有什么问题?或者这甚至不可能?我也简单地尝试过CORS,但也有同样的问题。
我有以下测试设置:
域 A:(中心域)
登录.php
<?php
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
setcookie("loggedin","5",time()+3600);
echo 1;
检查.php
<?php
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
$cookies = implode('; ', array_map(function ($v, $k) { return $k . '=' . $v; }, $_COOKIE, array_keys($_COOKIE)));
if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin'] == "5")) {
echo "alert('logged in, ".$cookies."');";
} else {
echo "alert('not logged in, ".$cookies."');";
}
域 B:
jsonp.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<h1>hi!</h1>
<script>
jQuery.ajax({
url: 'http://cookies.hidev.nl/login.php',
dataType: 'jsonp',
type: "get",
});
//note: first call will set the cookie, next succeeds only after reload due to async loading. This is only for test purposes
jQuery.ajax({
url: 'http://cookies.hidev.nl/check.php',
dataType: 'jsonp',
type: "get"
});
</script>
</body>
</html>