Set a cookie, with full access to its options (see SetCookie)
Modulescotty-0.22Haskell2010
Web.Scotty.Cookie
This module provides utilities for adding cookie support inside scotty applications. Most code has been adapted from 'scotty-cookie'.
Example
A simple hit counter that stores the number of page visits in a cookie:
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad
import Data.Monoid
import Data.Maybe
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Read as TL (decimal)
import Web.Scotty (scotty, html)
import Web.Scotty.Cookie (getCookie, setSimpleCookie)
main :: IO ()
main = scotty 3000 $
get "/" $ do
hits <- liftM (fromMaybe "0") $ getCookie "hits"
let hits' =
case TL.decimal hits of
Right n -> TL.pack . show . (+1) $ (fst n :: Integer)
Left _ -> "1"
setSimpleCookie "hits" $ TL.toStrict hits'
html $ mconcat [ "<html><body>"
, hits'
, "</body></html>"
]
- 3 types
- 19 values
- Packagescotty-0.22
- Exports22
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceCookie.hs
Set cookie
2 declarationsmakeSimpleCookie and setCookie combined.
Get cookie(s)
2 declarationsLookup one cookie name
Returns all cookies
Delete a cookie
1 declarationBrowsers don't directly delete a cookie, but setting its expiry to a past date (e.g. the UNIX epoch) ensures that the cookie will be invalidated (whether and when it will be actually deleted by the browser seems to be browser-dependent).
Helpers and advanced interface (re-exported from cookie)
2 declarationsTextual cookies. Functions assume UTF8 encoding.
Construct a simple cookie (an UTF-8 string pair with default cookie options)
cookie configuration
Data type representing the key-value pair to use for a cookie, as well as configuration options for it.
Creating a SetCookie
SetCookie does not export a constructor; instead, use defaultSetCookie and override values (see http://www.yesodweb.com/book/settings-types for details):
import Web.Cookie
:set -XOverloadedStrings
let cookie = defaultSetCookie { setCookieName = "cookieName", setCookieValue = "cookieValue" }
Cookie Configuration
Cookies have several configuration options; a brief summary of each option is given below. For more information, see RFC 6265 or Wikipedia.
A minimal SetCookie. All fields are Nothing or False except setCookieName = "name" and setCookieValue = "value". You need this to construct a SetCookie, because it does not export a constructor. Equivalently, you may use def.
The name of the cookie. Default value: "name"
The value of the cookie. Default value: "value"
The URL path for which the cookie should be sent. Default value: Nothing (The browser defaults to the path of the request that sets the cookie).
The time at which to expire the cookie. Default value: Nothing (The browser will default to expiring a cookie when the browser is closed).
The maximum time to keep the cookie, in seconds. Default value: Nothing (The browser defaults to expiring a cookie when the browser is closed).
The domain for which the cookie should be sent. Default value: Nothing (The browser defaults to the current domain).
Marks the cookie as "HTTP only", i.e. not accessible from Javascript. Default value: False
Instructs the browser to only send the cookie over HTTPS. Default value: False
The "same site" policy of the cookie, i.e. whether it should be sent with cross-site requests. Default value: Nothing
Data type representing the options for a SameSite cookie
Instances3Eq, Show, NFData
Eq SameSiteOptionDefined in cookie-0.5.1 · Web.CookieShow SameSiteOptionDefined in cookie-0.5.1 · Web.CookieNFData SameSiteOptionDefined in cookie-0.5.1 · Web.Cookie
Directs the browser to send the cookie for cross-site requests.
Directs the browser to send the cookie for safe requests (e.g. GET), but not for unsafe ones (e.g. POST)
Directs the browser to not send the cookie for any cross-site request, including e.g. a user clicking a link in their email to open a page on your site.