У меня есть пользователь, который находится в домене A. Когда он делает запрос в домен A, я хочу, чтобы домен A связался с доменом B. Как только запрос попадает в домен B, я хочу, чтобы домен B получил доступ к файлам cookie HTTP, которые пользователь имеет в домене. B, а не в домене A. Возможно ли это сделать с помощью CORS?
Так что перефразировать.
www.example.comwww.example.com -> www.example.netwww.example.net проверяет файлы cookie HTTP ВКЛЮЧЕНО www.example.net и НЕ www.example.com для запрашивающего пользователя.Очевидно, что из коробки это не работает. Я ищу безопасное решение, которое действительно работает.
Идея заключается в том, что я владею и www.example.com, и www.example.net, и я хочу входить в базу данных www.example.net, когда пользователь посещает www.example.com, ЕСЛИ у него есть определенный HTTP-куки, установленный на www.example.net.
ОБНОВЛЯТЬ
Я настроил CORS на тестовом серверном скрипте (www.example.net для целей этого примера):
<?PHP
header("Access-Control-Allow-Origin: https://www.example.com");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 60');
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
// may also be using PUT, PATCH, HEAD etc
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "Cookie Dump: \n";
echo print_r($_COOKIE);
А на www.example.com клиенте я просто использую fetch API:
<script>
fetch("https://badge-dev.myfreecams.com/codex/auth.php", {
method: 'GET',
credentials: 'include'
}).then(data => console.info(data));
</script>
Ошибок CORS нет. Если я зайду на серверный скрипт прямо в браузере, я увижу правильный дамп HTTP-куки на стороне клиента. Однако при загрузке www.example.com они не сбрасываются. Это означает, что я не могу делать то, что мне нужно, на своем сервере, www.example.net так как массив $_COOKIE пуст.
В example.com динамическом iframe с src для example.net, сгенерированном и добавленном к телу, вы можете получить доступ к example.net файлам cookie.
@Lessmore Мне нужно больше информации, чтобы проверить это.
чтобы попробовать прочитать о Access-Control-Allow-Origin: *dev.to/lydiahallie/cs-visualized-cors-5b8h мы сделали эту конфигурацию на нашем сервере nginx (или apache)
Вы пробовали мое решение (iframe)?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В example.com у нас есть страница с iframe, который загружает страницу из example.net.
индекс.html:
<!DOCTYPE html>
<html lang = "en">
<body>
<iframe src = "http://example.net/log.php"></iframe>
</body>
</html>
А в example.net у нас есть .php файл для чтения и записи cookie (или всего, что вы хотите сделать с помощью cookie):
<?php
$visits = isset($_COOKIE['visits']) ? intval($_COOKIE['visits']) : 0;
var_dump($_COOKIE);
$visits += 1;
setcookie('visits', $visits, time() + 3600);
Некоторые примечания:
В моей среде разработки (Win10, Chrome 87) Chrome избегает межсайтовых файлов cookie. В Chrome 80+ добавлен новый атрибут в set-cookie под названием SameSite для улучшения конфиденциальности. Для получения дополнительной информации читайте это - SameSite
В вашем случае этот параметр должен быть None таким SameSite=None, а ваши домены должны быть https
в двух словах, ваша команда set cookie должна иметь ... Secure; SameSite=None, например:
header("Set-Cookie: key=value; path=/; domain=example.net; Secure; SameSite=None");
В моей среде разработки у меня нет https-доменов, поэтому я отключил chrome SameSite для своих тестов Отключение Google Chrome SameSite Cookie Enforcement
Если вы установите параметр учетных данных в запросе из разных источников, то будут включены файлы cookie для URL-адреса, на который делается запрос. Однако это приведет к предварительному запросу OPTIONS до того, как будет установлен запрос, включающий учетные данные.
fetch("//example.net/", {
method: 'GET',
credentials: 'include'
});
Я думал, что это тоже сработает, но когда я сбрасываю файлы cookie на сервер, он ничего не показывает. Если я напрямую обращаюсь к сценарию на стороне сервера, файлы cookie присутствуют. Ошибок CORS нет.
Вы пробовали через iframe?