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

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

2 ответа

Решение

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

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

где options в конечном итоге в качестве дополнительных параметров 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 параметры, гарантирующие удаление куки браузером.

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

Чтобы установить куки вы используете 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, это проще.

Другие вопросы по тегам