Куки очень полезный способ хранения маленьких фрагментов данных на стороне клиента, которые могут быть получены, даже если пользователь закроет свой браузер. Phalcon\Http\Response\Cookies выступает в качестве глобального хранилища для кук. Куки хранятся в таком хранилище во время выполнения запроса и отправляются автоматически по его окончанию.

Базовое использование

Вы можете установить или извлечь куки простым обращением к сервису cookies из любого места в приложении:

<?php

use Phalcon\Mvc\Controller;

class SessionController extends Controller
{
    public function loginAction()
    {
        // Проверить, установлен ли cookie ранее
        if ($this->cookies->has('remember-me')) {
            // Получить файл cookie
            $rememberMeCookie = $this->cookies->get('remember-me');

            // Получить значение cookie
            $value = $rememberMeCookie->getValue();
        }
    }

    public function startAction()
    {
        $this->cookies->set(
            'remember-me',
            'some value',
            time() + 15 * 86400
        );
        $this->cookies->send();
    }

    public function logoutAction()
    {
        $rememberMeCookie = $this->cookies->get('remember-me');

        // Удалить файл cookie
        $rememberMeCookie->delete();
    }
}

Шифрование/дешифрование кук

По умолчанию Куки автоматически шифруются перед отправкой клиенту и расшифровываются при получении. Такая защита не позволяет неавторизированным пользователям видеть содержимое кук на стороне клиента (в браузере). Но несмотря на это, хранить в них конфиденциальные (персональные) данные не следует.

Вы можете отключить шифрование следующим образом:

<?php

use Phalcon\Http\Response\Cookies;

$di->set(
    'cookies',
    function () {
        $cookies = new Cookies();

        $cookies->useEncryption(false);

        return $cookies;
    }
);

При использовании шифрования должен быть установлен глобальный ключ в сервисе crypt:

<?php

    use Phalcon\Crypt;

    $di->set(
        'crypt',
        function () {
            $crypt = new Crypt();

            /**
             * Установить алгоритм шифрования.
             *
             * "Aes-256-gcm" является предпочтительным шифром, но он не может использоваться,
             * пока библиотека openssl не будет обновлена, которая доступна в PHP 7.1.
             *
             * "AES-256-ctr", возможно, является лучшим выбором для
             * алгоритма шифрования в эти дни.
             */
            $crypt->setCipher('aes-256-ctr');

            /**
             * Настройка ключа шифрования.
             *
             * Ключ должен был быть предварительно сгенерирован криптографически безопасным способом.
             *
             * Неверный ключ:
             * "le password"
             *
             * Лучше (но все равно небезопасно):
             * "#1dj8$=dp?.ak//j1V$~%*0X"
             *
             * Хороший ключ:
             * "T4\xb1\x8d\xa9\x98\x054t7w!z%C*F-Jk\x98\x05\\\x5c"
             *
             * Используйте свой собственный ключ. Не копируйте и не вставляйте этот пример ключа.
             */
            $key = "T4\xb1\x8d\xa9\x98\x054t7w!z%C*F-Jk\x98\x05\\\x5c";

            $crypt->setKey($key);

            return $crypt;
        }
    );