Подтвердить что ты не робот

Как вы получаете и устанавливаете файлы cookie в Zope и Plone?

Документация, и, что более важно, некоторые примеры кода были бы очень полезными. Я бы предпочел, чтобы это не было в защищенных сценариях, но в коде, который входит в современные пакеты.

4b9b3361

Ответ 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 для этого, это проще.