Spec-Zone.ru › Phalcon 2

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

Компонент 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

Spec-Zone.ru

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