Мой сервер отправляет файл cookie locale во фронтенд, который бэкэнд определяет из клиентского заголовка языка принятия. Когда я запускаю бэкэнд и интерфейс на localhost, я могу получить доступ к файлу cookie locale в javascript в document.cookie в браузере. Это также видно в chrome devtools (вкладка «Приложение» -> «Файлы cookie»).
Но когда я запускаю бэкэнд и интерфейс удаленно через https, я не могу получить доступ к cookie в javascript в браузере. Его также не видно в инструментах разработчика (вкладка «Приложение» -> «Файлы cookie»).
document.cookie // no locale cookie in javascript devtools console
"_ga=somevalue; _gid=somevalue; __stripe_mid=somevalue; __stripe_sid=somevalue"
Но я вижу файл cookie locale в заголовке ответа Set-Cookie и в chrome://settings/cookies/.
Ответ:
Set-Cookie: locale=%7B%22locale%22%3A%22en-US%22%2C%22countryCode%22%3A%22US%22%2C%22languageCode%22%3A%22en%22%7D; Max-Age=1617632; Path=/; Expires=Sat, 24 Apr 2021 07:34:03 GMT; Secure; SameSite=None
chrome://settings/cookies/:
Name: locale
Content : %7B%22locale%22%3A%22en-US%22%2C%22countryCode%22%3A%22US%22%2C%22languageCode%22%3A%22en%22%7D
Domain: mydomain.herokuapp.com
Path: /
Send for: Secure connections only
Accessible to script: Yes
Created: Monday, April 5, 2021 at 9:25:27 AM
Expires: Saturday, April 24, 2021 at 2:45:56 AM
Я знаю, что вы не можете получить доступ к файлам cookie только HTTP в javascript, но это не cookie только HTTP. Он настроен на безопасность, но это не имеет значения «Файлы cookie с этим атрибутом могут быть прочитаны / изменены с доступом к жесткому диску клиента или из JavaScript, если атрибут cookie HttpOnly не установлен».src. Это также файл cookie с перекрестным происхождением, мой бэкэнд работает на mydomain.herokuapp.com, а мой интерфейс - на mydomain.netlify.app.
Что может привести к тому, что этот файл cookie будет недоступен для javascript?
Спасибо. Я переключил его на тот же домен, но с разными поддоменами, и он все еще не работает. Разве это не должно работать на разных поддоменах?
Вы можете устанавливать файлы cookie только в том же домене или в родительском домене. Не через поддомены.
Я смог заставить его работать с разными поддоменами, установив домен на mydomain.com после прочтения этого stackoverflow.com/questions/32354962/…



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


Проблема заключалась в том, что интерфейс может читать файл cookie с помощью javascript, только если файл cookie установлен в домене внешнего приложения. Но бэкэнд и фронтенд находились в совершенно разных доменах. А поскольку серверная часть находилась в совершенно другом домене, она не может устанавливать cookie в домене внешнего интерфейса. Поэтому я переместил их в поддомены того же домена - frontend.mydomain.com и backend.mydomain.com. Затем я установил cookie на mydomain.com, как описано здесь.
res.cookie('locale', JSON.stringify(localeObj), {
maxAge: new Date() * 0.001 + 300,
domain: 'mydomain.com',
secure: true,
sameSite:'none',
});
Не существует файлов cookie с перекрестным происхождением. Вы не можете установить cookie в другом домене.