wai-session-postgresql-0.1.1.0: PostgreSQL backed Wai session store

Safe HaskellNone
LanguageHaskell2010

Network.Wai.Session.PostgreSQL

Synopsis

Documentation

dbStore :: (WithPostgreSQLConn a, Serialize k, Eq k, Serialize v, MonadIO m) => a -> StoreSettings -> IO (SessionStore m k v) Source

Create a new postgresql backed wai session store.

defaultSettings :: StoreSettings Source

Create default settings using a session timeout of one hour, a cryptographically secure session id generator using 24 bytes of entropy and putStrLn to log events to stdout.

clearSession :: WithPostgreSQLConn a => a -> ByteString -> Request -> IO () Source

This function can be called to invalidate a session and enforce creating a new one with a new session ID. It should be called *before* and calls to sessionStore are made. It needs to be passed a request and the cookie name explicitly due to the limited nature of the Network.Wai.Session interface. Sessions should be cleared when a login is performed, to prevent certain kinds of session hijacking attacks.

purgeOldSessions :: WithPostgreSQLConn a => a -> StoreSettings -> IO Int64 Source

Delete expired sessions from the database.

purger :: WithPostgreSQLConn a => a -> StoreSettings -> IO ThreadId Source

Run a thread using forkIO that runs periodically to purge old sessions.

ratherSecureGen :: Int -> IO ByteString Source

Generate a session ID with n bytes of entropy

class WithPostgreSQLConn a where Source

By default, you pass a postgresql connection to the session store when creating it. The passed connection will have to stay open for the (possibly very long) existence of the session and it should not be used for any other purpose during that time. You can implement an instance of this class for a connection pool instead, so that the session manager will not require a permanent open PostgreSQL connection.

Methods

withPostgreSQLConn :: a -> (Connection -> IO b) -> IO b Source

Call the function (Connection -> IO b) with a valid and open PostgreSQL connection.

data StoreSettings Source

These settings control how the session store is behaving

Constructors

StoreSettings 

Fields

storeSettingsSessionTimeout :: Int64

The number of seconds a session is valid Seconds are counted since the session is last accessed (read or written), not since it was created.

storeSettingsKeyGen :: IO ByteString

A random session key generator. The session ID should provide sufficient entropy, and must not be predictable. It is recommended to use a cryptographically secure random number generator.

storeSettingsCreateTable :: Bool

Whether to create the database table if it does not exist upon creating the session store. If set to false, the database table must exist or be created by some other means.

storeSettingsLog :: String -> IO ()

A function that is called by to log events such as session purges or the table creation.

storeSettingsPurgeInterval :: Int

The number of microseconds to sleep between two runs of the old session purge worker.