Your code looks fine to me. There is notmagic withXHtml.link just that when you click the link on server-side your function gets called before the /logout page gets rendered.
Can you add a function to LiftRules.onEndServicing ? LiftRules.onEndServicing.append { case (req, Full(resp)) => val cookies = resp.toResponse.cookies // trace the cookies case _ => } Br's, Marius On Aug 14, 8:20 pm, Richard Dallaway <dalla...@gmail.com> wrote: > I'm seeing some odd behaviour with a cookie I'm setting not being > removed. I'm unsure which phase of my code is broken or how deep my > misunderstandings are here... so I'm looking for some clues. > > I'm setting a "keep me logged in" cookie for users of my application. > That works fine using... > > val c = HTTPCookie(COOKIE_NAME, > encode(user)).setMaxAge(three_months_as_seconds) > S.addCookie(c) > > The encode(user) is, when all is said and done, returning the user PK > as the cookie value. > > I'm not using ProtoUser, I'm using the scheme outlined > inhttp://groups.google.com/group/liftweb/msg/85a8e790d5efec26 > > That is, I have... > > object LoginContext { > object userId extends SessionVar[Box[Long]](KeepMeLoggedIn.findUserId) > // etc... > > } > > ...and the findUserId function tries to decode the cookie and find a > matching user: > > def findUserId:Box[Long] = for { > cookie <- S.findCookie(COOKIE_NAME); > cookie_value <- cookie.value; > (id, salt) <- decode(cookie_value); > u <- User.find(By(User.id, id),By(User.salt,salt)) > } yield { > println(u) > id > } > > And that's all working for me. > > The problem comes when the user clicks the logout link, and I want to > remove this cookie. > > The logout link is: > > SHtml.link("/logout", LoginContext.logout, <span>Logout</span> ) > > ... and LoginContext.logout is > > KeepMeLoggedIn.removeCookie() > // the above is just: S.deleteCookie(COOKIE_NAME) > userId.remove() > currentUser.remove() > S.request.foreach(_.request.session.terminate) > > And for completeness, my /logout page is a redirect to the home page: > > Menu(Loc("logout", List("logout") -> false, "Logout", Hidden, If( > ()=>false, ()=>RedirectResponse("/index")) )) > > What I'm seeing is: > - user clicks logout > - logout function called, and Jetty tells me /logout took N > milliseconds to render > - then I'm seeing activity in the findUserId function, a result is > found, and the user is logged back in again. > - then Jetty tells me /index took N milliseconds to render. > > When I dig into HTTP headers, I'm not seeing the cookie value being > set in the response header (which I believe is required to remove it). > > I'm guessing my confusion is perhaps over how the SHtml.link magic works? > > Any suggestions of where I might poke around next? > > I'm using 1.1-SNAPSHOT (updated a few hours ago). > > Thank you > Richard --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---