## Please edit system and help pages ONLY in the master wiki!
## For more information, please see MoinMoin:MoinDev/Translation.
##master-page:HelpOnSessions
##master-date:2009-11-20T14:23:47Z
#acl -All:write Default
#format wiki
#language ru

= Как устроены сеансы в МойнМойн =

Механизм сеансов (sessions) в МойнМойн реализован при помощи специального сервиса сеансов, который может быть настроен посредством параметра `cfg.session_service` конфигурации.

В состав сервиса сеансов на данный момент входят:
 * Возможность суперпользователя «<<GetText(Change User)>>», подробнее см. ПомощьПоСуперПользователю
 * История посещённых пользователем страниц (page trail)

== Параметры конфигурации, относящиеся к работе сеансов ==

||<tablewidth="100%"rowbgcolor="#ffffcc"> '''Имя параметра''' || '''Значение по умолчанию''' || '''Описание''' ||
|| `cookie_domain` || `None` || Домен, используемый в сеансовых куки. ||
|| `cookie_path` || `None` || Путь, используемый в сеансовых куки. ||
|| `cookie_lifetime` || `(0, 12)` || Время жизни куки в часах, может быть дробным. Первый элемент кортежа используется для анонимных сеансов, второй — для сессий аутентифицированных пользователей. Для анонимных сессий, значение, равное 0, означает, что куки не используются; больше нуля — время в часах. Для аутентифицированных пользователей, значение больше нуля означает время в часах или вечные куки, если пользователь указал «<<GetText(Remember me)>>» в настройках; отрицательное значение означает время в часах по модулю значения и игнорирование настройки «<<GetText(Remember me)>>»; значение, равное нулю, отключает использование сеансов для авторизованных пользователей. ||

(!) В случае использования вики-фермы и желания использовать сеансы, общие для всех вики, необходимо поменять соответствующим образом `cookie_domain` и/или `cookie_path`.

== Пример кода с использованием механизма сеансов ==

При программировании расширений в случае необходимости использования сеансовых переменных достаточно воспользоваться полем параметра `request.session` как ассоциативным массивом (dict); значения, сохраняемые в нём, автоматически запоминаются и восстанавливаются при последующем использовании сеанса.

Пример [[ПомощьПоМакроКомандам|макрокоманды]], использующей механизм сеансов:
{{{#!python
#!python
# -*- coding: utf-8 -*-

"""
   Проверяет состояние сеанса.
"""

Dependencies = ['time']

def execute(macro, args):
    _ = macro.request.getText
    
   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)
}}}
