标题说明了一切,我无法弄清楚为什么我无法从同一域中的两个不同服务器获取或设置cookie。将$path
设置为/
,$domain
指定为127.0.0.1
,$secure
设置为false
,$httponly
设置为false
}。
以下是更详细的情况:
服务器1 - 127.0.0.1
在
Server 1
上我有一个PHP脚本,如果设置了cookie就会获取它,并设置一个新的cookie。然后旧的和新的cookie值将作为JSON返回。
服务器2 - 127.0.0.1:8000
在具有相同域名但不同端口的
Server 2
上,我有一个HTML文件,可以从Server 1
请求脚本。我无法获取Cookie,或者从Server 2
设置新Cookie。
以下是文件:
Server 1
上的PHP脚本
<?php
header ('Access-Control-Allow-Origin: *');
$old = !empty ($_COOKIE['test']) ? $_COOKIE['test'] : 'none';
$new = rand (0, 1000);
setcookie ('test', $new, time () * 2, '/', '127.0.0.1', false, false);
echo json_encode ('old: ' . $old . ' new: '. $new);
Server 2
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
var test = new XMLHttpRequest ();
test.onreadystatechange = function ()
{
if (this.readyState !== 4 || this.status !== 200) {
return;
}
document.body.innerHTML = JSON.parse (this.responseText);
};
test.open ('POST', 'http://127.0.0.1/cookieget.php', true);
test.send ();
</script>
</head>
<body></body>
</html>
&#34;到底是怎么回事?!&#34;
答案 0 :(得分:3)
虽然这两个服务器具有相同的主机名,但它们具有不同的端口,因此它们的来源不同。并且浏览器不允许您跨域设置cookie。
只有两个来源具有相同的方案,主机名和端口,才被认为是相同的。