2014-03-05 6 views
1

서로 다른 핸들러가 서로 영향을주지 않고 세션에서 다른 키를 설정하기를 원합니다. 저는 this wiki article에서 일하고 있는데, 이는 assoc을 사용하도록 권장합니다. assoc-in을 사용하여 세션의 경로를 업데이트 할 수 있다고 생각했습니다. 내 링 세션이 재설정되는 이유는 무엇입니까?

(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

요청에 따라 세션을 인쇄하고 있지만 마지막으로 추가 된 속성으로 세션이 끝나기 때문에 (존재하지 않는) 세션에 대한 응답이 있습니다. 요청에서 세션을 가져 와서 assoc을 수행 한 다음 새 세션을 응답의 일부로 리턴하십시오.