2009-06-23 9 views

Antwort

19

die response.setCookie() Methode verwenden. Sie können das Antwortobjekt über das Anfrageobjekt erreichen. Letztere Sie über Erwerb (self.REQUEST) erreichen kann, oder in den Ansichten von den übergebenen in Request-Objekt zugegriffen wird, in der Regel über self.request:

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

wo options Ende nach oben als zusätzliche Cookie-Parameter. So ein Cookie in ein nicht-Session-Cookie Drehen erfordert ein expires='date' Schlüsselwort, die Begrenzung die Cookie auf einen Pfad ist ein path='/somepath' Schlüsselwort zur setCookie() Methode. Hier gelten die üblichen Browser-Cookie-Regeln.

ein Cookie abzulaufen bereits im Browser so einstellen, können Sie entweder einen expires='date in the past' Stichwort, oder Sie können die response.expireCookie() Methode verwenden, die dies für Sie tut:

self.request.response.expireCookie(name, **options) 

In diesem Fall können Sie immer noch enthalten kann Optionen wie die path oder andere Cookie-Flags, aber die Methode wird die max_age und expires Optionen außer Kraft setzt das Cookie, um sicherzustellen, werden vom Browser gelöscht.

Obwohl Sie SESSION Unterstützung der Zope verwenden könnte, müssen Sie wirklich durch die Skalierbarkeit Probleme denken. Beispielsweise müssen Sie darüber nachdenken, wie Sitzungsdaten in einem Cluster gemeinsam genutzt werden, wenn Sie ZEO oder RelStorage verwenden. Es ist im Allgemeinen vorzuziehen, SESSION insgesamt zu vermeiden, wenn Skalierbarkeit ein Problem sein wird.

+0

Vielen Dank für diese Antwort! Wir laufen mit 3-4 Instanzen pro Zope-Anwendung, so dass wir uns nicht darum kümmern müssen, welche Instanz wir treffen, ist eine sehr nette Sache. – pydanny

6

Cookies Sie RESPONSE.setCookie verwenden einzustellen.

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

Der Cookie wird in der nächsten Anfrage in der REQUEST enden.

>>> self.REQUEST['cookiename'] 
'cookievalue' 

Sie löschen den Cookie, indem Sie None als Wert verwenden.

** Beachten Sie jedoch, dass die meisten Zeiten, wenn Leute Cookies verwenden, es ist, Variablen zu speichern, die mit Sitzungen zu tun haben, und Sie können self.REQUEST.SESSION dafür verwenden, es ist einfacher.