2017-02-12 82 views
1

标题说明了这一切,我无法弄清楚为什么我无法从同一个域上的两台不同服务器获取或设置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使用相同的域名,但不同的端口,我有一个从Server 1请求脚本的HTML文件。我无法获取cookie,或从Server 2设置新的cookie。

以下是文件:关于Server 1

<?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); 

HTML文件

PHP脚本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> 

“到底是什么回事? “

回答

3

虽然两台服务器具有相同的主机名,但它们有不同的端口,因此它们的来源不同。而浏览器不会让你设置cookie的交叉来源。

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

+0

即使执行cookie设置的脚本始终位于相同的域和端口上,只是从别处访问? –

+0

只要起源限制发生,服务器端发生的事情并不重要,因为浏览器没有看到。对于原始限制,唯一相关的是前端客户端发生的情况。因此,如果在源A的Web应用程序设置了cookie,源B的Web应用程序无法访问这些cookie,即使两个Web应用程序的源托管在后端的同一台服务器上。 – sideshowbarker