Документация, и, что более важно, некоторые примеры кода были бы очень полезными. Я бы предпочел, чтобы это не было в защищенных сценариях, но в коде, который входит в современные пакеты.
Как вы получаете и устанавливаете файлы cookie в Zope и Plone?
Ответ 1
Используйте метод response.setCookie()
. Вы можете достичь объекта ответа через объект запроса. Последнее вы можете получить через получение (self.REQUEST
) или в представлениях, обратившись к объекту запроса переданного объекта, обычно через self.REQUEST
:
self.request.response.setCookie(name, value, **options)
где options
заканчиваются как дополнительные параметры файла cookie. Таким образом, для превращения cookie в несеансовый файл cookie требуется ключевое слово expires='date'
, ограничивающее путь к файлу cookie ключевым словом path='/somepath'
для метода setCookie()
. Здесь применяются обычные правила cookie браузера.
Чтобы истечь уже установленный в браузере файл 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
, если масштабируемость будет проблемой.
Ответ 2
Чтобы установить файлы 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
в качестве значения.
** Обратите внимание, однако, что в большинстве случаев, когда люди используют файлы cookie для хранения переменных, которые связаны с сеансами, и вы можете использовать self.REQUEST.SESSION для этого, это проще.