2016-06-30 3 views
1

Мы устанавливаем «Cookie» заголовок, когда мы посылаем запрос Ajax от клиента (Android библиотеки Ion)Джанго, клиент посылает печенье теряется в сервере

Большую часть времени, Джанго поднимает печенье с request.COOKIES.
Однако иногда, послал печенье (sessionid в куки) не найден в request.COOKIES

Каковы возможные причины?

У меня возникают проблемы, чтобы найти, где request.COOKIES получает набор в кодовой базе Django ...

+1

[Он устанавливается здесь] (https://github.com/django/django/blob/2fcafd169b5fcf4bb6711ca8aa4d59d80225ec7a/django/core/handlers/wsgi.py#L135). – solarissmoke

ответ

0

Как уже отмечался в комментариях по @solarissmoke это делается в обработчике WSGI, путем разбора заголовка куков (от атрибут environ['HTTP_COOKIES']).

Обычными виновниками могут быть любые приложения, которые могут модифицировать запрос по пути от вашего http/proxy-сервера до промежуточного программного обеспечения django до вашего собственного кода просмотра.

Другая общая точка отказа при настройке файлов cookie на стороне клиента заключается в том, что стандартные куки-файлы являются специфичными для домена, а в браузерах есть настройки, позволяющие/запрещать установку файлов cookie за пределы текущего домена сервера (например, из объектов Response); или даже запретить любые файлы cookie. Вот the Google Chrome documentation о том, как управлять (и блокировать) файлы cookie на любой платформе.

Чтобы отладить, я предлагаю вам записать (например, распечатать) запрос.META (который должен содержать ключ среды HTTP_COOKIES) на разных этапах вашего приложения. Можно условно войти весь запрос, с чем-то вроде этого:

import logging 

logger = logging.getLogger('my_app') 


def my_view(request): 
    if not request.COOKIES: 
     logger.error('Cookies empty! HttpRequest.META is: %s', dict(request.META)) 

Вы должны, конечно, обрабатывать сценарии, когда клиенты не позволяют хранить печенье, возможно, показывает страницу ошибки, если куки сессии имеют решающее значение для вашего приложения.

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