How sessions work in MoinMoin

Sessions in MoinMoin are implemented using a special session handler that can be configured in cfg.session_handler. By default, an instance of the class MoinMoin.session.DefaultSessionHandler is used for managing sessions.

Code using the session framework currently includes:

  • the superuser "change user" functionality, see HelpOnSuperUser

  • the visited pages trail

cookie_domain

None

Domain used in the session cookie.

cookie_path

None

Path used in the session cookie.

cookie_lifetime

12

=0: forever, ignore user 'remember_me' setting; >0: n hours, or forever if user checked 'remember_me'; <0 -n hours, ignore user 'remember_me' setting

anonymous_session_lifetime

undefined

Set this to a non-zero value to enable anonymous sessions (can be fractional) [hours].

(!) 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.

(!) If you want anonymous users to get session features (e.g. a trail), set anonymous_session_lifetime.

Replacing session storage

Should you wish to store session data somewhere other than the filesystem cache Moin uses, you can use the DefaultSessionHandler along with a different class descending from DefaultSessionData. See MoinMoin/session.py for more details.

It is also possible but not recommended to use a different session handler altogether.

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. Some more advanced usage is possible, see MoinMoin.session.SessionData in the file MoinMoin/session.py.

Here's an example macro using the session code:

 1 # -*- coding: iso-8859-1 -*-
 2 
 3 """
 4  Tests session state.
 5 """
 6 
 7 Dependencies = ['time']
 8 
 9 def execute(macro, args):
 10  if macro.request.session.is_new:
 11  return macro.formatter.text('Not storing any state until you send a cookie.')
 12  if 'test' in macro.request.session:
 13  return macro.formatter.text("Loaded value %d" % macro.request.session['test'])
 14  import random
 15  value = random.randint(1, 100000)
 16  macro.request.session['test'] = value
 17  return macro.formatter.text("Set to value %d" % value)

AltStyle によって変換されたページ (->オリジナル) /