Установка и чтение кук в Yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
egorpromo
Сообщения: 113
Зарегистрирован: 2012.11.25, 12:24

Установка и чтение кук в Yii2

Сообщение egorpromo »

Подскажите как установить в Yii2 установить одну единственную куку. Есть имя куки, её значение, путь, домен и другие параметры куки. Что надо сделать, чтобы из контроллера установить эту куку в браузер? А также как прочитать куки, пришедшие из браузера?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Установка и чтение кук в Yii2

Сообщение vova07 »

Код: Выделить всё

 // В контроллере ставим куки
if (!isset(Yii::$app->request->cookies['test'])) {
    Yii::$app->response->cookies->add(new \yii\web\Cookie([
        'name' => 'test',
        'value' => 'testValue'
    ]));
}

// В view выводим куки
echo Yii::$app->request->cookies['test'];
// или 
echo Yii::$app->request->cookies->getValue('test'); 
Фишка в том что в компоненте $request куки доступны только для чтения, в то время как в $response ими можно манипулировать.
egorpromo
Сообщения: 113
Зарегистрирован: 2012.11.25, 12:24

Re: Установка и чтение кук в Yii2

Сообщение egorpromo »

То что надо, спасибо.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Установка и чтение кук в Yii2

Сообщение futbolim »

Это будет не уникальная кука.
http://stackoverflow.com/questions/7573 ... uniqueness
Нужно еще path устанавливать
Сам сталкивался, что создавались куки с одними и теми же названиями, т.е. не уникальные
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Установка и чтение кук в Yii2

Сообщение vova07 »

По умолчанию в Yii 2 $path = '/'. Так что все должно работать правильно.
egorpromo
Сообщения: 113
Зарегистрирован: 2012.11.25, 12:24

Re: Установка и чтение кук в Yii2

Сообщение egorpromo »

Ещё можно расширить класс \yii\web\Cookie и заполнить его свойства нужными значениями под себя и использовать его вместо базового \yii\web\Cookie.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: Установка и чтение кук в Yii2

Сообщение Insolita »

такая штука - идея с валидацией кук хорощая, но имхо нехватает метода для чтения одной конкретной куки без валидации, чтоб можно было прочесть конкретную устанавливаемую скриптом куку без отключения валидации на все остальные.
такой финт ушами смысл не имеет куки один раз берутся

Код: Выделить всё

public function beforeAction($action){
            if($action->id=='index' or $action->id=='stat'){
            \Yii::$app->request->enableCookieValidation=false;
            $pageSize=\Yii::$app->request->cookies->getValue('grid_pp',\Yii::$app->uconfig->getValue('grid_pp'));
            \Yii::$app->request->enableCookieValidation=true;
                  ..........
           }
}
цепляь криптовалку для js как-то накладно
Последний раз редактировалось Insolita 2014.07.11, 14:46, всего редактировалось 2 раза.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: Установка и чтение кук в Yii2

Сообщение Insolita »

Блин совсем мозги обфреймворкились $_COOKIE никто же не отменял...
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

$cookies = Yii::$app->response->cookies;

$cookies->add(new Cookie([
'name' => 'test',
'value' => 1,
'expire' => time() + 180,
]));

Кука не создается... Что я делаю не так?
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Установка и чтение кук в Yii2

Сообщение vitalik1183 »

попробуйте указать домен
Yii2!
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

vitalik1183 писал(а):попробуйте указать домен
Не помогло...
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Установка и чтение кук в Yii2

Сообщение vitalik1183 »

time совпадает с реальностью?
Yii2!
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

vitalik1183 писал(а):time совпадает с реальностью?
да
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Установка и чтение кук в Yii2

Сообщение vitalik1183 »

ставите на корневой домен или саб? точку указали перед доменом?
Yii2!
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

vitalik1183 писал(а):ставите на корневой домен или саб? точку указали перед доменом?
1. я указал только доменное имя 'test.dev'
2. Что значит точка перед доменом?
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Установка и чтение кук в Yii2

Сообщение vitalik1183 »

.domain.com

через setcookie кука ставится нормально?
Yii2!
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

vitalik1183 писал(а):.domain.com

через setcookie кука ставится нормально?
Через setcookie все работает.
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

Видимо, у меня уникальная проблема :)
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Установка и чтение кук в Yii2

Сообщение vitalik1183 »

cookieValidationKey установлена в request в конфиге?
скиньте полный листинг кода, глянем чего вы там понаписали. все должно ставится нормально.
Yii2!
good.good
Сообщения: 80
Зарегистрирован: 2014.12.06, 16:25

Re: Установка и чтение кук в Yii2

Сообщение good.good »

В конфиге:

Код: Выделить всё

'request' => [
            'enableCsrfValidation' => false,
            'cookieValidationKey' => 'sdi8s#fnj98jwiqiw;qfh!fjgh0d8f',
            
 


В модели:

Код: Выделить всё


public static function SetCookie()
    {

        $cookies = Yii::$app->response->cookies;

        $cookies->add(new Cookie([
            'name' => 'test1',
            'value' => 1,
            'domain' => 'test.dev',
            'expire' => time() + 180,
        ]));
        $cookies->add(new Cookie([
            'name' => 'test2',
            'value' => Yii::$app->request->get('loc'),
            'domain' => 'test.dev',
            'expire' => time() + 180,
        ]));
        $cookies->add(new Cookie([
            'name' => 'test3',
            'value' => date("H:i:s"),
            'domain' => 'test.dev',
            'expire' => time() + 15,
        ]));
    }

 
Ответить