anchor.diff:                          { new Web.IContext with
                               member this.UserSession = session :> _
                               member this.RequestUri = uri
  -                            member this.RootFolder = webRoot }
  +                            member this.RootFolder = webRoot
  +                            member this.Environment = upcast Map.ofList [(OwinContextKey, context :> obj)]}
                       let! body = reader.ReadToEndAsync() |> Async.AwaitTask
                       let! resp =
                           server.HandleRequest(
  
positive.code:                 |> Res.RenderLink
          }
  
      type OwinCookieUserSession(ctx: IOwinContext) =
  
          let refresh (cookie: string) =
              match cookie with
              | null -> ctx.Authentication.User <- null
              | cookie ->
                  let ticket = FormsAuthentication.Decrypt cookie
                  let principal = GenericPrincipal(FormsIdentity(ticket), [||])
                  ctx.Authentication.User <- principal
  
          do  // Using `try ... with` because `FormsAuthentication.Decrypt`
              // throws an exception when there is a cookie but its format is invalid
              try refresh ctx.Request.Cookies.[FormsAuthentication.FormsCookieName]
              with _ -> refresh null
  
          interface IUserSession with
  
  
negative.code: 
              member this.GetLoggedInUser() =
                  async {
                      ensureUserHasBeenRefreshed()
                      match ctx.Get<GenericPrincipal option>(WebSharperUserKey) with
                      | None -> return None
                      | Some x ->
                          if x.Identity.IsAuthenticated then
                              return Some x.Identity.Name
                          else return None
  