Cookie не может быть прочитан скриптом - PullRequest
0 голосов
/ 06 февраля 2019

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

import Cookies from 'js-cookie';
var cookie_name = 'cookie';
var cookie = Cookies.get(cookie_name);
console.log(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.Я также не вижу cookie, используя console.log(document.cookie) в браузере.Есть ли причина, по которой мой JS-код не может прочитать cookie?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

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

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

Я бы:

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

...

response.set_cookie(key='cookie', value=payload, domain=<url>, httponly=False)
0 голосов
/ 13 февраля 2019

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

EG:если ваше приложение backend / Flask запущено на 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 делает это,по умолчанию, в любом случае вы должны иметь возможность видеть ваши Cookies даже с разными путями, но установленными в том же домене на вашем DevTools по выбору под экраном Application > Cookies (в случае, если путь задан неверно console.log(document.cookies), не приведет к какому-либо результату илиможет удалить печенье, которое вы ищете)

0 голосов
/ 06 февраля 2019

вы должны работать с 'Reaction-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 и поместить его в параметр

* 1008.* экспортировать ваш компонент с HOC
export default withCookies(MyComponent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...