2014-03-05 28 views
1

我希望不同的处理程序在会话中设置不同的键而不会相互影响。我从this wiki article开始工作,建议使用assoc。我想我可以使用assoc-in来更新会话中的路径。为什么我的Ring会话被重置?

(defn handler-one 
    [request] 
    (prn "Session before one" (:session request)) 
    (-> (response "ONE") 
      (content-type "text/plain") 
      (#(assoc-in % [:session :key-one] "one")))) 

(defn handler-two 
    [request] 
    (prn "Session before two" (:session request)) 
    (-> (response "TWO") 
      (content-type "text/plain") 
      (#(assoc-in % [:session :key-two] "two")))) 

如果我把handler-one反复它打印Session before one {:key-one "one"}和同样handler-two打印前一交易日值。

通过使用assoc-in设置会话密钥我期望设置两个密钥,即{:key-one "one" :key-two "two"}。但看起来整个会话字典已被替换。

我做错了吗?

回答

3

您正在打印请求中的会话,但是您正在响应(不存在)会话,因此最终只有最后一个添加的属性。您应该从请求中获取会话,并将其关联到该会话中,然后将新会话作为响应的一部分返回。

相关问题