Я пытаюсь прочитать файл 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?
@Geuis, кажется, он использует react-cookie
@Geuis Я использую библиотеку js-cookie
как вы строите ответ фляги?
Бэкэнд и интерфейс размещены на разных серверах/доменах?
Вы можете показать файлы cookie из панели отладки Chrome?
Если вы не видите файл cookie в браузере, у вас должен возникнуть вопрос, почему файл cookie не устанавливается. Ваш JS-скрипт может быть в порядке, но если куки нет, его нельзя прочитать...



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


вы должны работать с '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 должны разрешать его чтение.
Если вы не видите файл cookie в консоли браузера, это означает, что он либо не устанавливается, либо устанавливается только с помощью HTTP.
SESSION_COOKIE_HTTPONLY должен влиять только на файл cookie сеанса, установленный Flask, похоже, вы пытаетесь установить совершенно другой файл cookie.
Я буду:
...
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, который вам нужен)
Cookiesне является допустимым API браузера. Файлы cookie всегда получаются/устанавливаются через document.cookies.