01 Управление куками
Куки очень полезный способ хранения маленьких фрагментов данных на стороне клиента, которые могут быть получены, даже если пользователь закроет свой браузер. 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;
}
);