Шифрованные cookies
Тему урока можно изучить в новом формате — в документации по Bitrix Framework. В ней улучшена структура, описание, примеры.
Шифрованные куки
Шифрованные куки
Cookie - это текстовая строка информации, которую веб-сервер передает в браузер посетителя сайта и которая сохраняется в файле на устройстве посетителя сайта. Как правило, используется для определения уникальности посетителя, времени его последнего визита, личных настроек, уникального идентификатора корзины покупок и т.д.
Подробнее...
(\Bitrix\Main\Web\CryptoCookie) позволяют отправлять данные пользователю, не раскрывая содержимое и не позволяя изменять данные внутри. Доступно с версии main 20.5.400.
Конфигурация
Чтобы ядро могло шифровать данные необходимо указать в настройках /bitrix/.settings.php crypto_key. По умолчанию, в новых дистрибутивах он генерируется автоматически.
Если он отсутствует, то добавьте его в ручную в файл настроек ядра:
<?php
return [
//...
'crypto' => [
'value' => [
'crypto_key' => 'mysupersecretphrase',
//советуем устанавливать 32-х символьную строку из a-z0-9,
],
'readonly' => true,
]
//...
];
Примеры использования
Установка Cookie
Чтобы установить шифрованную cookie, достаточно создать объект, как в сниппете ниже добавить в нужный Response:
$cookie = new \Bitrix\Main\Web\CryptoCookie('someName', 'secret value');
\Bitrix\Main\Context::getCurrent()->getResponse()->addCookie($cookie);
Так как значение cookie ограничено по длине, а данные шифруются и упаковываются в base64, то во избежание потери данных, ядро может создать несколько cookies, в которых будет зашифрованное значение.
В итоге в http-ответе будет содержаться cookie someName cо значением -crpt-someName_0. И cookie someName_0 уже с шифрованным значением вида DRMg6jrwXO1aUxTvdyBYyT-3_bCqomI9MMN_enurA5abplMm2OiSlNdu_1zgjbkKT_3D3uT8366.
Чтение Cookie
Чтобы получить расшифрованное значение cookie, достаточно использовать стандартное API ядра по работе с cookies:
$httpRequest = \Bitrix\Main\Context::getCurrent()->getRequest();
echo $httpRequest->getCookie('someName');
//secret value
Ядро автоматически определяет, что cookie шифрованная или нет, распаковывает значение и дешифрует. Если значение не удаётся расшифровать, то будет получено пустое значение.