Session back‑ends
=================

MicroPie abstracts session storage behind the :class:`~micropie.SessionBackend`
interface.  Different back‑ends may store session data in memory,
databases, caches or external services.  A session is a dictionary of
key/value pairs associated with a ``session_id`` cookie.

SessionBackend
--------------

.. class:: SessionBackend

   Abstract base class for session storage.  Implementations must
   provide the following asynchronous methods:

   .. method:: load(session_id)

      Load session data for the given *session_id*.  Return a
      dictionary of session data or an empty dictionary if the session
      does not exist or has expired.

   .. method:: save(session_id, data, timeout)

      Persist the *data* dictionary for the given *session_id* with
      an expiry time of *timeout* seconds.

InMemorySessionBackend
----------------------

.. class:: InMemorySessionBackend

   Concrete implementation of :class:`SessionBackend` that stores
   sessions in memory.  This back‑end is appropriate for development
   and testing but does not persist data across process restarts and
   cannot be shared among worker processes.

   .. method:: __init__()

      Create an empty in‑memory session store.

   .. method:: load(session_id)

      Return the session dictionary if it exists and has not expired
      according to :data:`micropie.SESSION_TIMEOUT`, otherwise return
      an empty dictionary.

   .. method:: save(session_id, data, timeout)

      Store *data* under *session_id* and update the last access time.

SESSION_TIMEOUT
---------------

.. data:: SESSION_TIMEOUT

   The default session expiration time in seconds (eight hours).  You
   can override this constant in your own code by assigning a new value
   to ``micropie.SESSION_TIMEOUT`` or by using a custom back-end that
   persists with a different timeout policy.

See also the :doc:`../howto/sessions` guide for examples of using and
implementing session back‑ends.
