Хранение данных в сессии
Компонент Phalcon\Session предоставляет объектно-ориентированные обертки для доступа к данным сессии.
Причины использования этого компонента вместо обычных сессий:
- Вы можете легко изолировать данные сессии между приложениями на одном домене
- Перехватывать, где данные сессии устанавливаются/получаются в вашем приложении
- Изменять адаптер сессии в соответствии с потребностями приложения
Инициализация сессии
Некоторые приложения интенсивно используют сессии, почти любое действие требует доступа к данным сессии. Есть и другие приложения, которые используют данные сессии не так часто. Благодаря контейнеру сервисов мы можем гарантировать, что к сессии обращаются только тогда, когда это явно необходимо:
//Start the session the first time when some component request the session service
$di->setShared('session', function() {
$session = new Phalcon\Session\Adapter\Files();
$session->start();
return $session;
});
Хранение/Извлечение данных в сессии
Из контроллера, представления или любого другого компонента, расширяющего Phalcon\DI\Injectable, вы можете получить доступ к сервису сессии и хранить/получать данные следующим образом:
class UserController extends Phalcon\Mvc\Controller
{
public function indexAction()
{
//Set a session variable
$this->session->set("user-name", "Michael");
}
public function welcomeAction()
{
//Check if the variable is defined
if ($this->session->has("user-name")) {
//Retrieve its value
$name = $this->session->get("user-name");
}
}
}
Удаление/Уничтожение сессий
Также возможно удалить определённые переменные или уничтожить всю сессию:
class UserController extends Phalcon\Mvc\Controller
{
public function removeAction()
{
//Remove a session variable
$this->session->remove("user-name");
}
public function logoutAction()
{
//Destroy the whole session
$this->session->destroy();
}
}
Изоляция данных сессии между приложениями
Иногда пользователь может дважды использовать одно приложение на одном сервере в одной сессии. Если мы используем переменные в сессии, мы хотим, чтобы каждое приложение имело отдельные данные сессии (даже если код и имена переменных одинаковы). Чтобы решить эту проблему, вы можете добавить префикс к каждой переменной сессии, созданной в определённом приложении:
//Isolating the session data
$di->set('session', function(){
//All variables created will prefixed with "my-app-1"
$session = new Phalcon\Session\Adapter\Files(
array(
'uniqueId' => 'my-app-1'
)
);
$session->start();
return $session;
});
Сессии пакетов
Phalcon\Session\Bag — это компонент, который помогает разделять данные сессии на «пространства имён». Работая таким образом, вы можете легко создавать группы переменных сессии в приложении. При установке переменных в «пакет» они автоматически сохраняются в сессии:
$user = new Phalcon\Session\Bag('user');
$user->setDI($di);
$user->name = "Kimbra Johnson";
$user->age = 22;
Персистентные данные в компонентах
Контроллеры, компоненты и классы, расширяющие Phalcon\DI\Injectable, могут вводить Phalcon\Session\Bag. Этот класс изолирует переменные для каждого класса. Благодаря этому вы можете сохранять данные между запросами в каждом классе независимым образом.
class UserController extends Phalcon\Mvc\Controller
{
public function indexAction()
{
// Create a persistent variable "name"
$this->persistent->name = "Laura";
}
public function welcomeAction()
{
if (isset($this->persistent->name))
{
echo "Welcome, ", $this->persistent->name;
}
}
}
В компоненте:
class Security extends Phalcon\Mvc\User\Component
{
public function auth()
{
// Create a persistent variable "name"
$this->persistent->name = "Laura";
}
public function getAuthName()
{
return $this->persistent->name;
}
}
Данные, добавленные в сессию ($this->session), доступны во всём приложении, в то время как персистентные данные ($this->persistent) доступны только в рамках текущего класса.
Реализация собственных адаптеров
Интерфейс Phalcon\Session\AdapterInterface должен быть реализован для создания собственных адаптеров сессии или расширения существующих.
Дополнительные адаптеры для этого компонента доступны в Phalcon Incubator
© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/session.html