Come si ottengono e si impostano i cookie in Zope e Plone?
Domanda
Documentazione e, soprattutto, alcuni esempi di codice sarebbero molto utili. Preferirei che questo non fosse negli script protetti, ma nel codice che va nei pacchetti moderni.
Soluzione
Utilizza il metodo response.setCookie ()
. È possibile raggiungere l'oggetto risposta tramite l'oggetto richiesta. Quest'ultimo è raggiungibile tramite acquisizione ( self.REQUEST
) o nelle viste accedendo all'oggetto della richiesta passata, di solito tramite self.request
:
self.request.response.setCookie(name, value, **options)
dove opzioni
finiscono come parametri cookie extra. Pertanto, la trasformazione di un cookie in un cookie non di sessione richiede una parola chiave expires = 'date'
, la limitazione del cookie a un percorso è una parola chiave path = '/ somepath'
a il metodo setCookie ()
. Qui si applicano le solite regole sui cookie del browser.
Per far scadere un cookie già impostato nel browser, è possibile utilizzare una parola chiave expires = 'date in passato'
oppure utilizzare response.expireCookie () metodo, che fa questo per te:
self.request.response.expireCookie(name, **options)
In questo caso puoi comunque includere opzioni come il percorso
o altri flag cookie, ma il metodo sovrascriverà le opzioni max_age
e scade
per garantire che il cookie venga eliminato dal browser.
Sebbene tu possa usare il supporto SESSION
di Zope, devi davvero riflettere sui problemi di scalabilità. Ad esempio, è necessario riflettere su come i dati della sessione verranno condivisi su un cluster se si utilizza ZEO o RelStorage. È generalmente preferibile evitare di usare SESSION
se la scalabilità sarà un problema.
Altri suggerimenti
Per impostare i cookie si utilizza RESPONSE.setCookie.
>>> self.REQUEST.RESPONSE.setCookie('cookiename', 'cookievalue', expires='Wed, 22 June 2009 12:00:00 GMT')
Il cookie finirà nella RICHIESTA nella prossima richiesta.
>>> self.REQUEST['cookiename']
'cookievalue'
Tu " elimina " il cookie utilizzando Nessuno
come valore.
** Nota, tuttavia, che la maggior parte delle volte in cui le persone usano i cookie è per memorizzare variabili che hanno a che fare con le sessioni, e puoi usare self.REQUEST.SESSION per questo, è più facile.