Как вы получаете и устанавливаете куки в Zope и Plone? - PullRequest
12 голосов
/ 23 июня 2009

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

Ответы [ 2 ]

19 голосов
/ 24 июня 2009

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

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

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

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

6 голосов
/ 23 июня 2009

Для установки файлов 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, это проще.

...