Recipe: Cookie sessions

Goal: Persist a small piece of state across requests.

open Suave
open Suave.Filters
open Suave.Operators
open Suave.Successful
open Suave.State.CookieStateStore
open Suave.Cookie

let app =
  statefulForSession >=> choose [
    path "/set" >=> context (fun ctx ->
      match HttpContext.state ctx with
      | None -> RequestErrors.BAD_REQUEST "no store"
      | Some store -> store.set "visits" 1 >=> OK "set")
    path "/get" >=> context (fun ctx ->
      match HttpContext.state ctx with
      | Some store ->
          match store.get "visits" with
          | Some n -> OK (string (n : int))
          | None -> OK "0"
      | None -> OK "0")
  ]

startWebServer defaultConfig app

Configure a strong serverKey in production. Guide: Sessions.