Почему файл cookie, который я устанавливаю в Django, и который я читаю в плагине cookie jQuery, использует мое время истечения? - PullRequest
0 голосов
/ 11 ноября 2011

Я пытаюсь создать cookie, который имеет определенное время истечения. Я установил это в моем представлении django со следующим кодом:

from datetime import datetime
response.set_cookie('cookie_name', 'cookie_value', expires=datetime.today() + timedelta(20*365), path='/path/to/cookie/')

Я читаю значение куки, используя плагин jQuery Cookie со следующим кодом:

if ($.cookie("cookie_name") == "True") {
    $.cookie("cookie_name", "False");
}
else {
    $.cookie("cookie_name", "True");
}

Моя основная проблема заключается в том, что файл cookie рассматривается как файл cookie сеанса (как показано в списке файлов cookie разработчика Chromium на вкладке «Ресурсы» в разделе «Файлы cookie»). Почему время истечения срока действия моего файла cookie не отображается или сбрасывается? Я могу убедиться, что файл cookie является файлом cookie сеанса, поскольку, если я закрою браузер и снова открою файл cookie, его там нет.

Обновление

Я изменил свой код cookie django на следующий, согласно ответу в этом посте :

from datetime import datetime
max_age = 20*365*24*60*60 #twenty years
expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
response.set_cookie(key='cookie_name', value='cookie_value', max_age=max_age, expires=expires, path='/path/to/cookie/')

Согласно Chromium, мои cookie все еще являются сессионными cookie.

Обновление 2

Я также пытался пропустить expires и установить только max_age, и у меня все еще остается та же проблема.

max_age = 20*365*24*60*60 #twenty years
expires = datetime.utcnow() + timedelta(seconds=max_age)
response.set_cookie(key='advisees', value=limit_to_advisees, expires=expires, path='/path/to/cookie/')

Джанго должен рассчитать max_age, если он не предоставлен. Я действительно смущен, здесь.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2011

Используя ваше Обновление 2 в качестве базы, я не могу воспроизвести проблему.

Какую версию Django вы используете?И 1.3, и 1.3.1 правильно устанавливают cookie для меня.

Также вы тестировали его в других браузерах?Кажется, здесь что-то более общее.

0 голосов
/ 18 ноября 2011

Мне удалось обойти эту проблему, убрав Django из уравнения и выполнив все, что связано с cookie, с помощью jQuery Cookie.Я думаю, что это может иметь какое-то отношение к пользовательскому промежуточному программному обеспечению, которое я использую, но я не смог подтвердить это.

0 голосов
/ 11 ноября 2011

Установите также max_age. Если нет, браузер выбросит куки, когда сессия завершена. Или, что еще лучше, просто укажите max_age, а не expires и expires будут рассчитаны для вас.

При дальнейшем исследовании вы используете объект даты, срок действия которого истекает, требуется объект даты и времени. Поэтому вы захотите сделать datetime.datetime.now () вместо datetime.date.today ()

...