Session 组合器/环:can';无法使会话正常工作

Session 组合器/环:can';无法使会话正常工作,session,clojure,compojure,ring,Session,Clojure,Compojure,Ring,我显然遗漏了一些显而易见的东西,但是: (ns session-demo.core (:gen-class) (:use compojure.core ring.middleware.session [hiccup core page form]) (:require [compojure.route :as route] [compojure.handler :as handler])) (defn index-page [

我显然遗漏了一些显而易见的东西,但是:

(ns session-demo.core
  (:gen-class)
  (:use compojure.core
        ring.middleware.session
        [hiccup core page form])
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))

(defn index-page []
    (html5
     [:body
      (form-to [:get "/status"]
               (submit-button "Proceed"))]))

(defn status-page [params]
  (html5
   [:body
    [:p "Session: " (:session params)]
    [:p "Params: " params]]))

(defroutes the-routes
  (GET "/" [] (index-page))
  (GET "/status" {session :session :as params} (status-page params)))

(def app
  (-> (handler/site the-routes)
      wrap-session))
单击“继续”按钮后,显示:

Session: {}

Params: {:ssl-client-cert nil, :remote-addr "127.0.0.1", :scheme :http, :query-params {}, :session {}, :form-params {}, :multipart-params {}, :request-method :get, :query-string nil, :route-params {}, :content-type nil, :cookies {"org.cups.sid" {:value "72d6fc6a299669e6332da6eb72964f97"}}, :uri "/status", :server-name "localhost", :params {}, :headers {"accept-encoding" "gzip, deflate", "user-agent" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0", "referer" "http://localhost:3000/", "connection" "keep-alive", "accept-language" "en-US,en;q=0.5", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "host" "localhost:3000", "cookie" "org.cups.sid=72d6fc6a299669e6332da6eb72964f97"}, :content-length nil, :server-port 3000, :character-encoding nil, :body #, :flash nil}

我希望在(:session params)中设置一些有意义的内容。

会话开始时为空。要在会话中放入内容,您需要从处理程序返回映射,并且在键
:session
下,您应该提供更新的会话数据

可能是这样的:

(defn index-page []
  {:body (html5
          [:body
           (form-to [:get "/status"]
                    (submit-button "Proceed"))])
   :session {:test [1 2 3]}})

如果我没有弄错的话,
:session
包含一个映射,其中的值属于该HTTP会话,默认情况下存储在cookie中。因此,除非您在
:session
映射中放入一些内容(通过使用修改后的
:session
映射返回响应),否则您将无法得到任何回报。我看到您有一个名为
org.cups.sid
的cookie,如果您提供将
{:cookie name“org.cups.sid”}
映射到
wrap session
函数的选项,它将使用该cookie存储会话数据。尝试过(wrap session{:cookie name“org.cups.sid”)也会产生相同的输出…如果安全性有任何问题,您应该使用内存会话,而不是基于cookie的会话。这里的问题是,在你把它放在那里之前,会话中不会有任何内容。