Spec-Zone.ru › Phalcon 3

Хранение данных в сессии

Компонент сессии предоставляет объектно-ориентированные обертки для доступа к данным сессии.

Причины использования этого компонента вместо сырых сессий:

  • Вы можете легко изолировать данные сессии между приложениями на одном домене
  • Перехватывать, где данные сессии устанавливаются/получаются в вашем приложении
  • Изменять адаптер сессии в соответствии с потребностями приложения

Инициализация сессии

Некоторые приложения являются сессионно-ёмкими, практически любое действие, которое выполняется, требует доступа к данным сессии. Есть и другие, которые случайным образом обращаются к данным сессии. Благодаря контейнеру сервисов мы можем гарантировать, что к сессии обращаются только тогда, когда это явно необходимо:

use Phalcon\Session\Adapter\Files as Session;

// Start the session the first time when some component request the session service
$di->setShared(
    "session",
    function () {
        $session = new Session();

        $session->start();

        return $session;
    }
);

Хранение/Извлечение данных в сессии

Из контроллера, представления или любого другого компонента, который расширяет Phalcon\Di\Injectable, вы можете получить доступ к сервису сессии и хранить/извлекать элементы следующим образом:

use Phalcon\Mvc\Controller;

class UserController extends 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");
        }
    }

}

Удаление/Удаление сессий

Также возможно удалить определённые переменные или уничтожить всю сессию:

use Phalcon\Mvc\Controller;

class UserController extends Controller
{
    public function removeAction()
    {
        // Remove a session variable
        $this->session->remove("user-name");
    }

    public function logoutAction()
    {
        // Destroy the whole session
        $this->session->destroy();
    }
}

Изоляция данных сессии между приложениями

Иногда пользователь может дважды использовать одно и то же приложение на одном сервере в одной сессии. Конечно, если мы используем переменные в сессии, мы хотим, чтобы каждое приложение имело отдельные данные сессии (даже если код и имена переменных одинаковы). Для решения этой проблемы вы можете добавить префикс к каждой переменной сессии, созданной в определённом приложении:

use Phalcon\Session\Adapter\Files as Session;

// Isolating the session data
$di->set(
    "session",
    function () {
        // All variables created will prefixed with "my-app-1"
        $session = new Session(
            [
                "uniqueId" => "my-app-1",
            ]
        );

        $session->start();

        return $session;
    }
);

Добавление уникального идентификатора не требуется.

Сессионные пакеты

Phalcon\Session\Bag — это компонент, который помогает разделить данные сессии на «пространства имён». Работая таким образом, вы можете легко создавать группы переменных сессии в приложении. Просто установив переменные в «пакете», они автоматически сохраняются в сессии:

use Phalcon\Session\Bag as SessionBag;

$user = new SessionBag("user");

$user->setDI($di);

$user->name = "Kimbra Johnson";
$user->age  = 22;

Постоянные данные в компонентах

Контроллеры, компоненты и классы, которые расширяют Phalcon\Di\Injectable, могут инжектировать Phalcon\Session\Bag. Этот класс изолирует переменные для каждого класса. Благодаря этому вы можете сохранять данные между запросами в каждом классе независимым образом.

use Phalcon\Mvc\Controller;

class UserController extends 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;
        }
    }
}

В компоненте:

use Phalcon\Mvc\Controller;

class Security extends 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 доступно больше адаптеров для этого компонента: Phalcon Incubator

© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/session.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API