Yii2 как получить значение cookie средствами фреймворка?
Есть кука advanced-frontend как получит ее средствами фреймворка ?
<pre>
раз
<? print_r(Yii::$app->request->cookies)?>
</pre>
<pre>
два
<? print_r($_COOKIE)?>
</pre>
в результате в $_COOKIE она есть , а в Yii::$app->request->cookies нет ...
Ответы (1 шт):
Напишу то, что написано в доках. Чтоб был ответ.
Во время записи и чтения кук через компоненты request
и response
, фреймворк предоставляет автоматическую валидацию, которая обеспечивает защиту кук от модификации на стороне клиента. Это достигается за счет подписи каждой куки секретным ключом, позволяющим приложению распознать куку, которая была модифицирована на клиентской стороне. В таком случае кука НЕ БУДЕТ доступна через свойство cookie collection
компонента request
Валидация кук защищает только от их модификации. Если валидация не была пройдена, получить доступ к кукам все еще можно через глобальную переменную $_COOKIE
. Это связано с тем, что дополнительные пакеты и библиотеки могут манипулировать куками без вызова валидации, которую обеспечивает Yii.
При использовании валидации кук необходимо указать значение свойства yii\web\Request::$cookieValidationKey
в конфигурации приложении. Это свойство будет использовано для генерации вышеупомянутого секретного ключа.
return [
'components' => [
'request' => [
'cookieValidationKey' => 'fill in a secret key here',
],
],
];
По-умолчанию валидация кук включена. Её можно отключить, установив свойство yii\web\Request::$enableCookieValidation
в false
P.S. Куки, которые напрямую читаются/пишутся через $_COOKIE
и setcookie()
НЕ БУДУТ валидироваться.