2017-02-12 11 views
1

Заголовок говорит, что все это, мне трудно понять, почему я не могу получить или установить файлы cookie с двух разных серверов в одном домене. С $path установлен в /, $domain указан как 127.0.0.1, $secure комплект false и $httponly комплект false.Два сервера, одно и то же доменное имя, не могут получать файлы cookie

Вот ситуация более подробно:

Сервер 1 - 127.0.0.1

На Server 1 У меня есть PHP-скрипт, который получает куки, если он установлен, и устанавливает новый печенье. Затем старые и новые значения cookie возвращаются как JSON.

Сервер 2 - 127.0.0.1:8000

На Server 2 с тем же именем домена, но другой порт, у меня есть файл HTML, который запрашивает скрипт из Server 1. Я не могу получить файл cookie или установить новый из Server 2.

Вот файлы:

PHP скрипт на 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 файл на 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, которое устанавливает куки-файлы, веб-приложение в источнике B не может получить доступ к этим куки-файлам, даже если источник для двух веб-приложений размещен на том же сервере на сервере. – sideshowbarker

 Смежные вопросы

  • Нет связанных вопросов^_^