你如何在Zope和Plone中获取和设置cookie?

pyd*_*nny 12 zope plone

文档,更重要的是,一些代码示例非常有用.我希望这不是在受保护的脚本中,而是在进入现代包的代码中.

Mar*_*ers 19

使用该response.setCookie()方法.您可以通过请求对象访问响应对象.后者可以通过acquire(self.REQUEST)或通过访问传入的请求对象在视图中访问,通常通过self.request:

self.request.response.setCookie(name, value, **options)
Run Code Online (Sandbox Code Playgroud)

其中,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)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您仍然可以包含诸如path或其他cookie标记之类的选项,但该方法将覆盖max_ageexpires选项以确保浏览器删除cookie.

虽然您可以使用Zope的SESSION支持,但您确实需要考虑可伸缩性问题.例如,如果使用ZEO或RelStorage,则需要考虑如何在群集中共享会话数据.SESSION如果可扩展性成为问题,通常最好避免完全使用.


Len*_*bro 6

要设置cookie,请使用RESPONSE.setCookie.

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

cookie将在下一个请求中的REQUEST中结束.

>>> self.REQUEST['cookiename']
'cookievalue'
Run Code Online (Sandbox Code Playgroud)

您可以使用None作为值"删除"cookie .

**但是请注意,大多数人使用cookie时都会存储与会话有关的变量,你可以使用self.REQUEST.SESSION,这样更容易.