Заголовок говорит, что все это, мне трудно понять, почему я не могу получить или установить файлы 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>
«Что, черт возьми, происходит ?! "
Несмотря на то, что скрипт, выполняющий настройку cookie, всегда находится в том же домене и порту, только что доступном из другого места? –
Что касается ограничений происхождения, то что происходит на стороне сервера, не имеет значения, потому что браузеры этого не видят. Для ограничений происхождения единственное, что имеет значение, - это то, что происходит на стороне клиента. Таким образом, если у вас есть веб-приложение в источнике A, которое устанавливает куки-файлы, веб-приложение в источнике B не может получить доступ к этим куки-файлам, даже если источник для двух веб-приложений размещен на том же сервере на сервере. – sideshowbarker