两个服务器,相同的域名,无法获取cookie

时间:2017-02-12 18:42:22

标签: javascript php ajax cookies cors

标题说明了一切,我无法弄清楚为什么我无法从同一域中的两个不同服务器获取或设置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

上的HTML文件
<!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;

1 个答案:

答案 0 :(得分:3)

虽然这两个服务器具有相同的主机名,但它们具有不同的端口,因此它们的来源不同。并且浏览器不允许您跨域设置cookie。

只有两个来源具有相同的方案,主机名和端口,才被认为是相同的。