packages feed

happs-tutorial-0.8.1: templates/cookies.st

<h3>Cookies</h3>

<p>Besides the cookies used by google analytics, which are obfuscated by javascript, happs-tutorial
   uses cookies to track session state -- the data that corresponds to the current user's session in
<br>
<br>data AppState = AppState {
<br>  appsessions :: Sessions SessionData,  
<br>  appdatastore :: Users
<br>} deriving (Show,Read,Typeable,Data)
</p>

<p>When you log in, a cookie is created that expires in an hour 
   (3600 seconds). Every time a happstack handler needs to check if a user is logged in (for example, 
   when it needs to decide whether to show the logged-in-user menubar), a check is made to see if a cookie
   has been set. </p>

<p>The cookie code is in <a href=/projectroot/src/Misc.hs>ControllerMisc.hs</a>: 

<br>
<br>startsess' getLandingpage (RenderGlobals origRq ts _) user = do
<br>  let sd = SessionData user
<br>  key <- update \$ NewSession sd
<br>  addCookie (3600) (mkCookie "sid" (show key))
<br>  .....
<br>
<br>getMbSessKey rq = runReaderT (readCookieValue "sid") (rqInputs rq,rqCookies rq)</p>
<p>As you can see, the basic use of cookies is surprisingly simple with the two functions
addCookie and mkCookie</p>
<p>We've spent a good bit of time now on how happstack-server handles requests,
   so we're ready to move on to the major feature of happstack-state,
   <a href="/tutorial/introductiontomacid">MACID</a>.</p>