Dear James, et al., Here is what I'm trying to do:
----------------------------------- ;;Login form to login. To login successfully, let ;;password = secret (defn login-view [] (html [:p (form-to [:post "/login/" ] "User name: " [:input {:name "name", :type "text"}] [:br] "Password: " [:input {:name "password", :type "password"}] [:br] [:input {:type "submit" :value "Log in"}])])) ;;takes the input params from the login form and stores the ;;logged in user into a session. You get logged in when the ;;password value is = secret (defn login-controller [params session] (do (println (params "password") (params "name"))) (dosync (if (= "secret" (params "password")) ; Username can include letters, numbers, ; spaces, underscores, and hyphens. ;(.matches (params :name) "[\\w\\s\\-]+")) (do {:session (assoc session :name (params "name"))} (redirect "/page/")) (redirect "/oops/")))) ;;In the repl, the following appears: ;; ;;Getting userid: nil ;; (defn page [request session title body] (do (println "Getting userid:" (:name session)) ) ) ;; I'm using compojure's defroutes (as you can see) (defroutes main-routes (GET "/login/" [] (login-view)) (POST "/login/" {params :params session :session} (login-controller params session)) (ANY "/page/" {request :request session :session} (page request session "hello" "world")) ) ------------------------------- PROBLEM: I can't retrieve the session ":name" that I've been attempted to store to. I don't know if it's getting stored into the session in the first place. And finally, is it that I'm unable to retrieve it. I know it's probably a very minor problem that needs to be fixed, but I've been going up the wall on this one!!!!!!!!!!!!! Thanks in advance, shree ps. My code may seem a bit contrived. It's been bundled together off of a bunch of examples I've seen at the ring, compojure, sandbar examples, and elsewhere... On May 11, 8:01 pm, James Reeves <jree...@weavejester.com> wrote: > On 12 May 2011 00:04, Shree Mulay <shreemu...@gmail.com> wrote: > > > From this code, I can't figure out where you "instantiate" the session > > var, store to it, and read back from it? I know there's not > > instantiation in clojure(???). I hope your able to get what I'm having > > trouble figuring out. > > The session is read from a :session key on the request map, and > written using a :session key on the response map. > > For example, this route returns the value of the session key :x > > (GET "/get" {session :session} > (str "x = " (:x session))) > > It's equivalent to the Sinatra route: > > get "/get" do > "x = #{session[:x]}" > end > > The main difference is that the session has to be bound explicitly. We > don't just get a magic session map hanging around in the background. > > Writing a session is a little trickier: > > (GET "/set" [x :as {session :session}] > {:session (assoc session :x x) > :body (str "You set x = " x)}) > > The equivalent Sinatra route is: > > get "/set" do |x| > session[:x] = x > "You set x = #{x}" > end > > Ring sessions are a little unwieldy because you write by changing the > response, rather than calling a side-effectful function. Sandbar takes > a slightly different approach that looks more like the Sinatra code: > > (GET "/get" [] > (str "x = " (session-get :x))) > > (GET "/set" [x] > (session-put! :x x) > (str "You set x = " x)) > > Sandbar is a little cleaner for simple things, but Ring sessions have > the advantage of working well with middleware. Idiomatic Ring tends to > use a lot of middleware, far more than one might use in Rack (for > instance). > > - James -- 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