##master-page:HelpOnSessions ##master-date:2009-11-20T14:23:47Z #acl -All:write Default #format wiki #language ru = Как устроены сеансы в МойнМойн = Механизм сеансов (sessions) в МойнМойн реализован при помощи специального сервиса сеансов, который может быть настроен посредством параметра `cfg.session_service` конфигурации. В состав сервиса сеансов на данный момент входят: * Возможность суперпользователя «<>», подробнее см. ПомощьПоСуперПользователю * История посещённых пользователем страниц (page trail) == Параметры конфигурации, относящиеся к работе сеансов == || '''Имя параметра''' || '''Значение по умолчанию''' || '''Описание''' || || `cookie_domain` || `None` || Домен, используемый в сеансовых куки. || || `cookie_path` || `None` || Путь, используемый в сеансовых куки. || || `cookie_lifetime` || `(0, 12)` || Время жизни куки в часах, может быть дробным. Первый элемент кортежа используется для анонимных сеансов, второй — для сессий аутентифицированных пользователей. Для анонимных сессий, значение, равное 0, означает, что куки не используются; больше нуля — время в часах. Для аутентифицированных пользователей, значение больше нуля означает время в часах или вечные куки, если пользователь указал «<>» в настройках; отрицательное значение означает время в часах по модулю значения и игнорирование настройки «<>»; значение, равное нулю, отключает использование сеансов для авторизованных пользователей. || (!) В случае использования вики-фермы и желания использовать сеансы, общие для всех вики, необходимо поменять соответствующим образом `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) }}}