7TyLe
@7TyLe
Back-End Developer

Как установить куки при кроссдоменном AJAX запросе?

Имеется вопрос об установке междоменных/сторонних/3rd party или как ещё говорят межсайтовых cookie.
Имеется 2 домена (имена упрощены для большей ясности и лучшего понимания):

1. public.com (отсюда осуществляется отправка формы на 2ой домен AJAX-ом )
2. 3rdparty.com (принимает только AJAX запросы, написан на PHP)

К обоим доменам есть полный доступ, но они находятся на разных серверах/IP.
На 2ом домене в том числе есть возможность установить заголовки:
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Origin: https://public.com');

Вопрос: какие в 2020 году есть хорошие варианты установки $_COOKIE для домена 3rdparty.com при посещении пользователем public.com?
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Нет. Это невозможно. Если вы делаете единый логин то тут используются технологии Single Sign On
Ответ написан
@Kano
Почти точно так же как раньше, но есть небольшие дополнения.
Первое что нужно сделать это полностью перейти на https (если хотим что бы в хроме не хромало).
Сделать ajax запрос до 3rdparty.com что бы тот выставил куку, перед этим указав
req.withCredentials = true
Сервер на этот запрос должен дать ответ с нужными заголовками, например:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin: https://public.com
Vary: Origin

И конечно установить саму куку
Set-Cookie: {CookieName}={CookieValue}; Max-Age=63072000; Path=/; SameSite=None; Domain=.3rdparty.com; HttpOnly; Secure

Особо хочу отметить заголовок "Access-Control-Allow-Origin" который всегда должен иметь конкретное значение, никаких подстановочных знаков.
А также обязательные атрибуты заголовка "Set-Cookie" - "SameSite=None" и "Secure"

Этот не будет работать на всех устройствах под ios и вроде бы в огненной лисе (там вообще запрещены кросдоменные куки если пользователь не посещал сайт который выставляет куку в основном окне браузера).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы