<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>HelpOnSessions</title></articleinfo><section><title>How sessions work in MoinMoin</title><para>Sessions in <ulink url="https://wiki.hcoop.net/HelpOnSessions/MoinMoin#">MoinMoin</ulink> are implemented using a special session handler that can be configured in <code>cfg.session_handler</code>. By default, an instance of the class <code>MoinMoin.session.DefaultSessionHandler</code> is used for managing sessions. </para><para>Code using the session framework currently includes: </para><itemizedlist><listitem><para>the superuser &quot;change user&quot; functionality, see <ulink url="https://wiki.hcoop.net/HelpOnSessions/HelpOnSuperUser#">HelpOnSuperUser</ulink> </para></listitem><listitem><para>the visited pages trail </para></listitem></itemizedlist><section><title>Session related configuration</title><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para> cookie_domain </para></entry><entry colsep="1" rowsep="1"><para> <code>None</code> </para></entry><entry colsep="1" rowsep="1"><para> Domain used in the session cookie. </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> cookie_path </para></entry><entry colsep="1" rowsep="1"><para> <code>None</code> </para></entry><entry colsep="1" rowsep="1"><para> Path used in the session cookie. </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> cookie_lifetime </para></entry><entry colsep="1" rowsep="1"><para> <code>12</code> </para></entry><entry colsep="1" rowsep="1"><para>=0: forever, ignore user 'remember_me' setting; &gt;0: n hours, or forever if user checked 'remember_me'; &lt;0 -n hours, ignore user 'remember_me' setting </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> anonymous_session_lifetime </para></entry><entry colsep="1" rowsep="1"><para> undefined </para></entry><entry colsep="1" rowsep="1"><para> Set this to a non-zero value to enable anonymous sessions (can be fractional) [hours]. </para></entry></row></tbody></tgroup></informaltable><para><inlinemediaobject><imageobject><imagedata depth="16" fileref="https://wiki.hcoop.net/moin_static1911/moniker_bt/img/idea.png" width="16"/></imageobject><textobject><phrase>(!)</phrase></textobject></inlinemediaobject> If you run a wiki farm and you want to share the session cookie between farm wikis, you want to change <code>cookie_domain</code> and/or <code>cookie_path</code>. </para><para><inlinemediaobject><imageobject><imagedata depth="16" fileref="https://wiki.hcoop.net/moin_static1911/moniker_bt/img/idea.png" width="16"/></imageobject><textobject><phrase>(!)</phrase></textobject></inlinemediaobject> If you want anonymous users to get session features (e.g. a trail), set <code>anonymous_session_lifetime</code>. </para></section><section><title>Replacing session storage</title><para>Should you wish to store session data somewhere other than the filesystem cache Moin uses, you can use the <code>DefaultSessionHandler</code> along with a different class descending from <code>DefaultSessionData</code>. See <code>MoinMoin/session.py</code> for more details. </para><para>It is also possible but not recommended to use a different session handler altogether. </para></section><section><title>Session example code</title><para>As an extension programmer, in order to use session variables, you can use <code>request.session</code> like a dict, values stored there are automatically saved and restored if a session is available. Some more advanced usage is possible, see <code>MoinMoin.session.SessionData</code> in the file <code>MoinMoin/session.py</code>. </para><para>Here's an example macro using the session code: </para><programlisting format="linespecific" language="python" linenumbering="numbered" startinglinenumber="1"><lineannotation><![CDATA[# -*- coding: iso-8859-1 -*-]]></lineannotation>

<phrase><![CDATA["""]]></phrase>
<phrase><![CDATA[    Tests session state.]]></phrase>
<phrase><![CDATA["""]]></phrase>

<methodname><![CDATA[Dependencies]]></methodname><![CDATA[ = []]><phrase><![CDATA[']]></phrase><phrase><![CDATA[time]]></phrase><phrase><![CDATA[']]></phrase><![CDATA[]]]>

<token><![CDATA[def]]></token><![CDATA[ ]]><methodname><![CDATA[execute]]></methodname><![CDATA[(]]><methodname><![CDATA[macro]]></methodname><![CDATA[, ]]><methodname><![CDATA[args]]></methodname><![CDATA[):]]>
<![CDATA[    ]]><token><![CDATA[if]]></token><![CDATA[ ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[request]]></methodname><![CDATA[.]]><methodname><![CDATA[session]]></methodname><![CDATA[.]]><methodname><![CDATA[is_new]]></methodname><![CDATA[:]]>
<![CDATA[        ]]><token><![CDATA[return]]></token><![CDATA[ ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[formatter]]></methodname><![CDATA[.]]><methodname><![CDATA[text]]></methodname><![CDATA[(]]><phrase><![CDATA[']]></phrase><phrase><![CDATA[Not storing any state until you send a cookie.]]></phrase><phrase><![CDATA[']]></phrase><![CDATA[)]]>
<![CDATA[    ]]><token><![CDATA[if]]></token><![CDATA[ ]]><phrase><![CDATA[']]></phrase><phrase><![CDATA[test]]></phrase><phrase><![CDATA[']]></phrase><![CDATA[ ]]><token><![CDATA[in]]></token><![CDATA[ ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[request]]></methodname><![CDATA[.]]><methodname><![CDATA[session]]></methodname><![CDATA[:]]>
<![CDATA[        ]]><token><![CDATA[return]]></token><![CDATA[ ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[formatter]]></methodname><![CDATA[.]]><methodname><![CDATA[text]]></methodname><![CDATA[(]]><phrase><![CDATA["]]></phrase><phrase><![CDATA[Loaded value ]]></phrase><phrase><![CDATA[%d]]></phrase><phrase><![CDATA["]]></phrase><![CDATA[ % ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[request]]></methodname><![CDATA[.]]><methodname><![CDATA[session]]></methodname><![CDATA[[]]><phrase><![CDATA[']]></phrase><phrase><![CDATA[test]]></phrase><phrase><![CDATA[']]></phrase><![CDATA[])]]>
<![CDATA[    ]]><token><![CDATA[import]]></token><![CDATA[ ]]><methodname><![CDATA[random]]></methodname>
<![CDATA[    ]]><methodname><![CDATA[value]]></methodname><![CDATA[ = ]]><methodname><![CDATA[random]]></methodname><![CDATA[.]]><methodname><![CDATA[randint]]></methodname><![CDATA[(1, 100000)]]>
<![CDATA[    ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[request]]></methodname><![CDATA[.]]><methodname><![CDATA[session]]></methodname><![CDATA[[]]><phrase><![CDATA[']]></phrase><phrase><![CDATA[test]]></phrase><phrase><![CDATA[']]></phrase><![CDATA[] = ]]><methodname><![CDATA[value]]></methodname>
<![CDATA[    ]]><token><![CDATA[return]]></token><![CDATA[ ]]><methodname><![CDATA[macro]]></methodname><![CDATA[.]]><methodname><![CDATA[formatter]]></methodname><![CDATA[.]]><methodname><![CDATA[text]]></methodname><![CDATA[(]]><phrase><![CDATA["]]></phrase><phrase><![CDATA[Set to value ]]></phrase><phrase><![CDATA[%d]]></phrase><phrase><![CDATA["]]></phrase><![CDATA[ % ]]><methodname><![CDATA[value]]></methodname><![CDATA[)]]>
</programlisting></section></section></article>