2016-08-05 2 views
0

У меня проблема, что при конкретном представлении request.user возвращает AnonymousUser.Зарегистрированный пользователь AnonymousUser по определенному виду

Это вызвано библиотекой javascript, которую я использую для сбора платежей. Эта библиотека javascript создает файл cookie, который делает django доступным для входа в систему как анонимный пользователь.

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

И эта проблема возникает только на одной конкретной странице, где эта библиотека вставлена ​​на страницу.

Любые идеи, что не так?

ответ

2

javascript in question устанавливает печенье по названию mistertango[collect][mt_fp].

Когда были определены файлы cookie (RFC 6265, я думаю), они, похоже, не указали, какие символы вы можете использовать в имени файла cookie, кроме как в основном «text».

Это вызывает некоторые проблемы с разбором имен файлов cookie. Django полагается на http.cookies Python для этого, и кажется, что http.cookies не разрешает скобки в именах cookie. http.cookie не удается проанализировать пары cookie с скобками в нем, и не анализирует пары после этого, что означает, что он не видит cookie sessionid, который он использует для аутентификации.

Я не могу сказать, должен ли Django/http.cookie поддерживать или не поддерживать это. PHP does however, похоже, поддерживает его (даже если он сломан), в то время как Ruby on Rails does not. Простым решением является использовать только буквенно-цифровые символы в именах печенья.

Для вашего случая лучшим решением является получение автором javascript для изменения имени своего файла cookie. Если это невозможно, или, в среднем, вы можете разместить javascript самостоятельно и изменить имя файла cookie в своей копии. (Это может не сработать, если куки-файл используется для чего-то вне этого фрагмента javascript, но я действительно не понимаю Javascript и не вижу, для чего он используется.)

+0

Это немного сложнее, чем когда он приходит к cookie __names__. См. Http://stackoverflow.com/questions/1969232/allowed-characters-in-cookies –

+0

Спасибо. Я должен был подумать о поиске SO вместо того, чтобы пытаться читать RFC. Это только заставило меня смутиться и заснуть. Я думаю, вы должны придерживаться буквенно-цифровых символов (новейшие RFC минус реалистичные реализации) при настройке файлов cookie и быть готовыми практически ко всем при разборе файлов cookie. – mboehn

Смежные вопросы