2009-06-23 4 views

ответ

19

Используйте метод response.setCookie(). Вы можете достичь объекта ответа через объект запроса. Последнее можно достичь за счет приобретения (self.REQUEST), или в представлениях путем доступа к переданному в объект запроса, как правило, через self.request:

self.request.response.setCookie(name, value, **options) 

где options в конечном итоге, как дополнительные параметры печенья. Таким образом, для превращения cookie в несеансовый файл cookie требуется ключевое слово expires='date', ограничение печенья на путь - это ключевое слово path='/somepath' для метода setCookie(). Здесь применяются обычные правила cookie браузера.

истечь печенье уже установлен в браузере, вы можете либо использовать expires='date in the past' ключевое слово, или вы можете использовать response.expireCookie() метод, который делает это для вас:

self.request.response.expireCookie(name, **options) 

В этом случае вы можете включить такие как path или другие флагов cookie, но метод переопределяет параметры max_age и expires, чтобы гарантировать, что cookie будет удален браузером.

Хотя вы можете использовать поддержку Zope SESSION, вам действительно нужно продумать проблемы масштабируемости. Например, вам нужно подумать о том, как данные сеанса будут передаваться через кластер, если вы используете ZEO или RelStorage. Как правило, предпочтительно избегать использования SESSION, если масштабируемость будет проблемой.

+0

Спасибо за этот ответ! Мы запускаем с 3-4 экземплярами на приложение zope, поэтому * не * нужно беспокоиться о том, какой экземпляр мы нажимаем, это очень хорошая вещь. – pydanny

6

Для установки файлов cookie вы используете RESPONSE.setCookie.

>>> self.REQUEST.RESPONSE.setCookie('cookiename', 'cookievalue', expires='Wed, 22 June 2009 12:00:00 GMT') 

В следующем запросе файл cookie будет завершен в запросе.

>>> self.REQUEST['cookiename'] 
'cookievalue' 

Вы «удаляете» cookie с использованием None в качестве значения.

** Обратите внимание, что в большинстве случаев, когда люди используют куки-файлы, они хранят переменные, которые связаны с сеансами, и вы можете использовать self.REQUEST.SESSION для этого, это проще.