Поведение печенья в Джанго - PullRequest
0 голосов
/ 17 ноября 2018

Я уже некоторое время занимаюсь исследованием файлов cookie в Джанго.

Однако я не понимаю следующее.

Значение по умолчанию в django для SESSION_COOKIE_DOMAIN равно None, поэтому атрибут домена будет пустым.

Django устанавливает cookie сессии в промежуточном программном обеспечении :

response.set_cookie(
    # ...
    domain=settings.SESSION_COOKIE_DOMAIN,
) 

Функция set_cookie из объекта ответа имеет следующую соответствующую часть , если доменом является None, который является настройкой по умолчанию в Django:

if domain is not None:
    self.cookies[key]['domain'] = domain

Следовательно, я предполагаю, что домен в заголовке cookie не указан.

Я прочитал эту замечательную статью о файлах cookie , и пользователь 2864740 сделал хороший вывод об этом :

"Если в файле cookie не указан домен, файл cookie должен соответствовать только точному имени хоста запроса. Нет поддоменов, нет частичных совпадений.

Это означает, что просто не включается атрибут домена - недопустимо устанавливать пустой атрибут домена. "

1.) Почему cookie все еще работает, если недопустимо оставлять атрибут домена пустым или я что-то здесь не так понял?

2.) Предположим, у меня есть домен example.com

Я не изменяю настройки по умолчанию для django, поэтому SESSION_COOKIE_DOMAIN равно None

Если я проверяю файлы cookie для домена example.com , я вижу следующее:

  • Имя: sessionid
  • Значение: XXXXXX
  • Хост: example.com

Я думал, что установка домена cookie без предшествующей точки недопустима. Почему Django не использует .example.com ?

Это в основном то же самое, если домен cookie example.com , потому что он будет вести себя так же, как и с предыдущей точкой?

3.) Правильно ли я понял, что если я установлю файл cookie на example.com (без www) , файл cookie также будет доступен во всех поддоменах, и в настоящее время его нет можно установить cookie только на основном домене, который недоступен на поддоменах.

1 Ответ

0 голосов
/ 17 ноября 2018

1.) Почему cookie по-прежнему работает, если недопустимо оставлять атрибут домена пустым или я что-то здесь не так понял?

Код, на который вы только что указали, дает понять, что в ответе не указан домен; ключ просто не входит. То, что будет недопустимым (точнее, "undefined" ), будет включать ключ Domain, но без значения атрибута. Джанго этого не делает.

2.) Я думал, что установка домена cookie без предшествующей точки недопустима. Почему Django не использует .example.com?

Во-первых, у вас это задом наперед. В RFC 6265 говорится, что начальная точка «не разрешена» (хотя она будет просто проигнорирована, если она там есть).

Во-вторых, данные cookie, которые вы указали, не включают ключ Domain. «Хост» не является атрибутом cookie; по-видимому, это просто Chrome, сообщающий вам, откуда пришло печенье.

3.) Правильно ли я понял, что если я установлю файл cookie на example.com (без www), файл cookie также будет доступен во всех поддоменах, и в настоящее время невозможно установить только cookie на основном домене, который недоступен на поддоменах.

правый.

...