The "magic" is in wrap-session, which adds the session middleware to your stack.
At that point, your ring handler will see that it's request map has a new key (:session) which is a map containing all your session variables. You can assoc anything into that map and it will be stored in the session. By default, this is all stored in-memory, it's possible to use a database instead if you specify options to wrap-session. See (doc wrap-session) or http://clojuredocs.org/ring/ring.middleware.session/wrap-session >From your gist: ; The next line is using destructuring to split out the session map into a local variable named "session". (defn handler [{session :session, uri :uri}] ; The next line is reading the ":n" value out of the session map. (let [n (session :n 1)] -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en