2013-01-10 9 views
13

Angenommen, ich möchte ein Cookie löschen (zB Session-Cookie Ring):In clojure/ring, wie lösche ich einen Cookie?

eine Antwortkarte, wie dies zu machen:

{:cookies {"ring-session" {:value "kill", :max-age 1}}} 

scheint zu stehen, aber es fühlt sich ein bisschen hacky.

Gibt es eine saubere Möglichkeit, es einfach zu löschen?

+7

entweder Cookie Ablaufdatum zu Beginn der Epoche oder Höchstalter auf 0 gesetzt ist eine Standardmethode von Cookies auch in Nicht-Ring-Anwendungen zu löschen. – soulcheck

+2

'(defn expire-cookie [resp: name] (assoc-in bzw. [: cookies name] {: value" ": max-age 0}))' –

Antwort

11

Das scheint wie eine ziemlich vernünftige Art und Weise zu gehen. Many web a applications löschen Sie Cookies, indem Sie sie durch eine ersetzen, die bald abläuft. Die :max-age 1 Syntax macht dieses Aussehen viel eleganter als es zum Beispiel in Javascript.

2

Ich benutzte Wrap-Sitzung und die anderen Handler in ring.middleware. das Cookie max Alte Einstellung wurde in der Reaktion arbeiten, da es gerade überschrieben wurde

Dies ist, was ich tun musste (diagnostizieren sehr frustrierend!):

(defn clear-session! [resp] 
(assoc resp :session nil)) 

source

0

ring scheint dies nicht zu unterstützen, aber Sie können dem Benutzeragenten einen neuen Cookie mit einem Expires-Attribut mit einem Wert in der Vergangenheit senden.

more info