2009-06-23 9 views

Odpowiedz

19

Użyj metody response.setCookie(). Możesz dotrzeć do obiektu odpowiedzi za pośrednictwem obiektu żądania. Te ostatnie można osiągnąć poprzez przejęcia (self.REQUEST) lub przez dostęp do poglądów przeszedł w obiekt żądania, zazwyczaj poprzez self.request:

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

gdzie options skończyć jako dodatkowe parametry ciasteczka. W związku z tym przekształcenie pliku cookie w plik cookie poza sesją wymaga słowa kluczowego expires='date', ograniczenie pliku cookie do ścieżki to słowo kluczowe path='/somepath' do metody setCookie(). Obowiązują tu zwykłe reguły dotyczące plików cookie w przeglądarce.

wygaśnie cookie już ustawiony w przeglądarce, można też użyć expires='date in the past' słowo kluczowe, lub można użyć metody response.expireCookie(), który robi to za ciebie:

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

W tym przypadku można nadal obejmować opcje takie jak path lub inne znaczniki plików cookie, ale metoda zastąpi opcje max_age i expires, aby upewnić się, że plik cookie został usunięty przez przeglądarkę.

Mimo że możesz korzystać z pomocy Zope'a SESSION, naprawdę musisz przemyśleć kwestie związane ze skalowalnością. Na przykład musisz przemyśleć, jak dane sesji będą współdzielone w klastrze, jeśli korzystasz z ZEO lub RelStorage. Zasadniczo lepiej jest unikać korzystania z SESSION, jeśli skalowalność będzie stanowić problem.

+0

Dzięki za odpowiedź! Pracujemy z 3-4 instancjami na aplikację zope, więc * nie * martwienie się o to, którą instancję uderzamy, jest bardzo miłe. – pydanny

6

Aby ustawić pliki cookie, użyj RESPONSE.setCookie.

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

Plik cookie trafi do ŻĄDANIA w następnym żądaniu.

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

Użytkownik "usuwa" plik cookie, używając wartości None.

** Pamiętaj jednak, że większość czasu, w którym ludzie używają plików cookie, służy do przechowywania zmiennych, które mają związek z sesjami, i możesz użyć self.REQUEST.SESSION do tego, jest to łatwiejsze.