2015-01-25 1 views
1

Я использую набор бутылок/куки-меканизм для отслеживания моего user_id (с «секретным» параметром при вызове set/get_cookie()
Во время обычного HTTP-запроса все это хорошо, но при выполнении запроса XHR (тот же домен) user_id = request.get_cookie('user_id', secret='mysecret') возвращает None.
при проверке на браузере клиента, печенье и ключ/значение по-прежнему доступны.Бутылка, как get_cookie во время запроса AJAX (тот же домен)

Как с этим бороться?
(Я всегда было сказано, что xhr-запросы - это HTTP-запросы, поэтому из того же домена, файлы cookie должны быть разделены, нет проблемы с доставкой из «секретной» обработки бутылки?)

ответ

1

-сдаточной документации состояний, при установке куки путь по умолчанию "/" https://bottlepy.org/docs/dev/tutorial.html#tutorial-cookies

путь: Ограничить печенье к заданному пути (по умолчанию: /)

Но код комментарий говорит, что default - это «текущий путь», например /XXX/dev https://github.com/bottlepy/bottle/blob/master/bottle.py#L1796

: пары путь: ограничивает кук для данного пути (по умолчанию: текущий путь)

На основе такого поведения мы можем предположить, позже это правда.

Итак, при настройке файла cookie, если вы хотите, чтобы какой-либо путь имел доступ к файлу cookie из вашего домена. Укажите путь в вашем файле cookie как «/»

set_cookies('test', 123, secret='mysecret', path='/')

1

Я попробовал set_cookies('test', 123, secret='mysecret') по запросу AJAX, это сработало, но до сих пор не удалось найти предыдущие файлы cookie.

Тогда я заметил, что мои предыдущие куки, называемые cook1 и cook2, написанные под «обычным» HTTP-запросом, если у них один и тот же домен, имели другой «путь» (в Chrome ressource explorer). Они были установлены по пути '/ XXX/dev', и мой запрос AJAX был просто в пути '/ XXX'
Итак, я изменил свой запрос AJAX от/XXX/do_stuff, чтобы указать на «/ XXX/dev/do_stuff», а затем , удивление! cook1 и cook2 могут быть прочитаны моим запросом AJAX.

Не уверен, что это ошибка в бутылках или если такое поведение предназначено специально (в этом случае, если кто-то может объяснить мне, почему ...), но по крайней мере у меня есть мое решение.