Session 在clojure环中清除会话(注销用户)
给人的印象是,简单地将请求映射的:session设置为nil将导致注销,我的代码如下所示:Session 在clojure环中清除会话(注销用户),session,clojure,ring,Session,Clojure,Ring,给人的印象是,简单地将请求映射的:session设置为nil将导致注销,我的代码如下所示: (GET "/logout" [ :as request] (if-let [useremail (get-in request [:session :ph-auth-email])] (-> (response {:status 200, :body (pr-str "logged out " useremail),
(GET "/logout" [ :as request]
(if-let [useremail (get-in request [:session :ph-auth-email])]
(-> (response {:status 200,
:body (pr-str "logged out " useremail),
:headers {"Content-Type:" "text/html"}})
(assoc request [:session nil]))))
但我有一个错误:
java.lang.Thread.run(Thread.java:745)
2015-02-18 09:29:05.134:WARN:oejs.AbstractHttpConnection:/logout
java.lang.Exception: Unrecognized body: {:status 200, :body "\"logged out \" \"sova\"", :headers {"Content-Type:" "text/html"}}
只需要将主体作为参数,因为它将围绕主体构建:status
和:headers
(请参阅)。但是,映射不是有效的主体-只允许字符串、文件和流
因此,这就是导致异常的原因;现在,关于您的问题:您可以通过在响应中将:session
设置为nil
,将您的代码减少为:
(GET "/logout" [:as request]
(if-let [useremail (get-in request [:session :ph-auth-email])]
{:status 200,
:body (pr-str "logged out " useremail),
:session nil, ;; !!!
:headers {"Content-Type" "text/html"}}))
这实际上取决于您如何维持会话。你能分享登录的代码吗?显然,错误消息与会话无关,但与一般的响应和具体的正文有关。啊哈,响应就是这些。有道理。谢谢,我刚才注意到的一件事是,“内容类型”不应该在里面有冒号,否则它将无法正确设置内容类型,它将提示您下载文件,而不是将结果显示到浏览器。除了那个小细节,太完美了。我调整了代码示例以包含正确的标题名。