## Please edit system and help pages ONLY in the master wiki!
## For more information, please see MoinMoin:MoinDev/Translation.
##master-page:Unknown-Page
##master-date:Unknown-Date
#acl -All:write Default
#format wiki
#language en
= How sessions work in MoinMoin =

Sessions in MoinMoin are implemented using a special session service that can be configured in `cfg.session_service`.

Code using the session framework currently includes:
 * the superuser "change user" functionality, see HelpOnSuperUser
 * the visited pages trail

== Session related configuration ==
|| cookie_domain || `None` || Domain used in the session cookie. ||
|| cookie_path || `None` || Path used in the session cookie. ||
|| cookie_lifetime || `(0, 12)` || Cookie lifetime in hours, can be fractional. First tuple element is for anonymous sessions, second tuple element is for logged-in sessions. For anonymous sessions, t=0 means that they are disabled, t>0 means that many hours. For logged-in sessions, t>0 means that many hours, or forever if user checked 'remember_me', t<0 means -t hours and ignore user 'remember_me' setting - you usually don't want to use t=0, it disables logged-in sessions. ||

(!) If you run a wiki farm and you want to share the session cookie between farm wikis, you want to change `cookie_domain` and/or `cookie_path`.


== Session example code ==

As an extension programmer, in order to use session variables, you can use `request.session` like a dict, values stored there are automatically saved and restored if a session is available.

Here's an example macro using the session code:
{{{
#!python
# -*- coding: iso-8859-1 -*-

"""
    Tests session state.
"""

Dependencies = ['time']

def execute(macro, args):
    if macro.request.session.is_new:
        return macro.formatter.text('Not storing any state until you send a cookie.')
    if 'test' in macro.request.session:
        return macro.formatter.text("Loaded value %d" % macro.request.session['test'])
    import random
    value = random.randint(1, 100000)
    macro.request.session['test'] = value
    return macro.formatter.text("Set to value %d" % value)
}}}
