Настройка истекающих файлов cookie в Plone - PullRequest
3 голосов
/ 22 февраля 2012

Я хотел бы в будущем установить cookie со сроком действия в несколько часов

Уже существует вопрос, который показывает, как установить cookie:

Как сделатьВы получаете и устанавливаете куки в Zope и Plone?

... но я не нашел примеров того, как сгенерировать временную метку RFC 822 с Zope «правильным способом».Похоже, что другие фреймворки внутренне генерируют временные метки из datetime.

Также возможно ли иметь файлы cookie, срок действия которых истекает при закрытии браузера?Это без срока годности?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Вы можете установить срок действия cookie в определенный день в будущем, установив атрибут cookie в cookie. Это должно быть значение RFC822, сгенерированное с помощью formatdate из модуля email.Utils в стандартной библиотеке Python.

import time
from email.Utils import formatdate
expiration_seconds = time.time() + (5*60*60) # 5 hours from now
expires = formatdate(expiration_seconds, usegmt=True) 
response.setCookie('cookie_name', 'value', path='/', expires=expires)

(Internet Explorer не поддерживает атрибут max-age, предложенный в спецификации cookie).

Просто не устанавливайте значение expires, если вы хотите файл cookie, который очищается при закрытии браузера.

Примечание. Важно всегда указывать путь, по которому ваш файл cookie действителен, иначе он будет действительным только на той странице, на которой вы его установили.

2 голосов
/ 22 февраля 2012

Вы можете увидеть ответы на эти два вопроса, чтобы понять, как создать действительное RFC 822 дата / время значение.

  1. Как лучше всего преобразовать объект zope DateTime в объект Python datetime?
  2. Как преобразовать RFC822 в объект даты и времени Python?

Чтобы создать cookie, срок действия которого истекает после закрытия браузера, просто создайте cookie без даты истечения срока действия. Это создаст cookie сеанса, срок действия которого истечет, как только истечет время сеанса браузера.

...