06.02.2013
Итак, плагин session модифицирован следующим образом: $keeper->{session}->get_session возвращает не HASH, а объект session::Session.
Инициализация
$session = $keeper->{session}->get_session
или
$session = $keeper->{session}->get_session( domain => 'some.domain' )
Переменная $session в среде Contenido является глобальной, так что эту инициализацию можно поставить в autohandler или dhandler и далее использовать по усмотрению в любой компоненте.
Атрибуты
Всегда начинаются с символа подчеркивания, не удаляются при процедуре logoff, доступны при прямом обращению к хешу
- _session_id - уникальный идентификатор сессии. Имеет прокси метод $session->session_id;
- _timestamp - Unix-time начала сессии;
- _domain - домен, на который выдана сессионная кука. Выделен в отдельный атрибут, так как в принципе один и тот же проект может выдавать сессии по нескольким доменам.
Методы
- get [$session->get('key')] - получение значения по ключу "key". Также, как и раньше, можно обратиться напрямую к хешу $session->{'key'};
- set [$session->set(%hash)] - установка значениий. На вход должен получить HASH - набор пар ключ-значение;
- delete [$session->delete(@keys)] - удаление ключей. На вход передается список ключей, которые необходимо удалить;
- session_id [$session->session_id] - прокси-метод для получения id сессии;
- id [$session->id] - прокси-метод для получения id залогиненного пользователя. Если пользователь не залогинен, возвращает undef;
- logon [$session->logon( login => 'ivan', passwd => '123456' )] - прокси-метод, обеспечивающий аутентификацию пользователя через плагин users и заполняющий объект сессии значениями из профиля пользователя. Подробности чуть ниже;
- logoff [$session->logoff] - как видно из названия, обеспечивает выход пользователя из системы. Подробности тоже ниже.
Метод logon
Метод работает при подключенном плагине users. Осуществляет либо проксирование параметров login или email вкупе с паролем в параметре passwd или осуществлять автологин при передаче в метод параметром profile объекта "Профиль пользователя". Примеры:
$session->logon( login => 'ivan', passwd => '123456' );
$session->logon( email => 'a@enter.ru', passwd => '23456' );
$session->logon( profile => $user_profile );
Метод logoff
По умолчанию удаляет из объекта все ключи, не начинающиеся с символа подчеркивания. Можно оградить нужные вам ключи от удаления, передав методу параметр clear. При обязательно этом будут удалены ключи с названиями: id, email, login, name, nick, type, status, ltime, avatar. Если в clear передать ссылку на список названий, то также будут удалены ключи, совпадающие с этим списком. Примеры:
# Полная очистка сессии:
$session->logoff;
# Очистка только дефолтных параметров сессии:
$session->logoff( clear => 1 );
# Очистка дефолтных и дополнительных параметров сессии:
$session->logoff( clear => ['city', 'gender', 'phone'] );
Все предыдущие методы, работающие через $keeper->{session}, продолжают функционировать. Кроме того, под работу с новым объектом переписаны модули session::AUTH::FaceBook и session::AUTH::VKontakte с соответствующими им компонентами oAuth-авторизации. На пути session::AUTH::Mailru и session::AUTH::Google.
Данные изменения коснулись пока только utf-8 ветки проекта. Однако, из-за требований проекта zvuki.ru будут перенесены и в koi8-r версию.