Cookie не может быть прочитан скриптом

Я пытаюсь прочитать файл cookie из браузера с помощью следующего кода Javascript, используя пакет js-cookie. Однако файл cookie не читается.

import Cookies from 'js-cookie';
var cookie_name = 'cookie';
var cookie = Cookies.get(cookie_name);
console.info(cookie);

Файл cookie создается с использованием приведенного ниже кода Python, в котором используется Flask.

response.headers.add('Access-Control-Allow-Headers', 'Content-Type, text/plain')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
response.headers.add('Access-Control-Allow-Credentials', 'true')
response.set_cookie(key='cookie',
                value=payload,
                domain='<url>')

Приложение Flask имеет следующие параметры

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SESSION_COOKIE_HTTPONLY'] = False

Выше я отключил флаг HttpOnly, чтобы мой скрипт мог читать куки. Я также не вижу файл cookie с помощью console.info(document.cookie) в браузере. Есть ли причина, по которой мой JS-код не может прочитать файл cookie?

Cookies не является допустимым API браузера. Файлы cookie всегда получаются/устанавливаются через document.cookies.
Geuis 06.02.2019 05:57

@Geuis, кажется, он использует react-cookie

Şivā SankĂr 06.02.2019 06:03

@Geuis Я использую библиотеку js-cookie

Black 07.02.2019 04:20

как вы строите ответ фляги?

nebuler 09.02.2019 06:44

Бэкэнд и интерфейс размещены на разных серверах/доменах?

henrik123 14.02.2019 07:30

Вы можете показать файлы cookie из панели отладки Chrome?

duc mai 14.02.2019 17:02

Если вы не видите файл cookie в браузере, у вас должен возникнуть вопрос, почему файл cookie не устанавливается. Ваш JS-скрипт может быть в порядке, но если куки нет, его нельзя прочитать...

Chava Geldzahler 15.02.2019 05:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
7
794
3

Ответы 3

вы должны работать с 'react-cookie', установить его через npm. Затем в вашем компоненте попробуйте импортировать HOC withCookies

import { withCookies } from 'react-cookie';

получить привязку куки по ключу

    function getCookieFucnctionTest(myRecordFromCookies) {
       var value = "; " + document.cookie;
       var parts = value.split("; " + myRecordFromCookies+ " = ");
       if (parts.length === 2) return parts.pop().split(";").shift();
     }

после использования getCookieFucnctionTest и преобразовать его в параметр

экспортируйте свой компонент с помощью HOC

export default withCookies(MyComponent);

Я хотел бы использовать библиотеку js-cookie из-за простоты. Кроме того, переключение пакетов не помогает, так как браузер не обнаруживает файл cookie. Непонятно, почему этот файл cookie не может быть прочитан с помощью скрипта, поскольку настройки Flask должны разрешать его чтение.

Black 07.02.2019 05:04

Если вы не видите файл cookie в консоли браузера, это означает, что он либо не устанавливается, либо устанавливается только с помощью HTTP.

SESSION_COOKIE_HTTPONLY должен влиять только на файл cookie сеанса, установленный Flask, похоже, вы пытаетесь установить совершенно другой файл cookie.

Я буду:

  1. Подтвердите, что файл cookie действительно установлен (вы можете проверить это с помощью инструментов разработчика)
  2. Если он устанавливается и каким-то образом устанавливается только с включенным HTTP, измените свой код:

...

response.set_cookie(key='cookie', value=payload, domain=<url>, httponly=False)

Тот факт, что вы не можете увидеть свой файл cookie через console.info(document.cookies), возможно, является признаком несоответствия между доменом или путем вашего файла cookie и тем, к чему пытается получить доступ браузер.

НАПРИМЕР: если ваше серверное/фласк-приложение работает на api.example.com:8080, а клиент использует www.example.com:80, вам необходимо явно указать домен .example.com, чтобы он был доступен для чтения глобально в вашем домене, а также вы может возникнуть ошибка CORS при установке файла cookie в запросе AJAX, вам может потребоваться добавить следующие заголовки в Flask:

response.headers.add('Access-Control-Allow-Headers', 'Content-Type, Set-Cookie')
response.headers.add('Access-Control-Allow-Origin', 'http://www.example.com')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
response.headers.add('Access-Control-Allow-Credentials', 'true')
response.set_cookie(key='cookie',
                value=payload,
                domain='.example.com')

Вы также можете применить path='/', но, похоже, Flask делает это по умолчанию, в любом случае вы должны иметь возможность видеть свои файлы cookie даже с разными путями, но установленными в одном и том же домене в выбранных вами DevTools под экраном Application > Cookies (в случае, если путь установлен неправильно console.info(document.cookies) не даст никакого результата или может удалить файл cookie, который вам нужен)

Другие вопросы по теме