@AlexSer

Как организовать работу с куками в Yii2?

Помогите с советом! Что делаю не так?
Есть пользователь, который относится к двум кабинетам. Необходимо организовать быструю смену кабинетов, так как создавать отдельные логины для 1 пользователя не охота.
Вот часть кода, при авторизации происходит проверка сохраненного кабинета в контроллере SiteController.php
public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            $rows = (new \yii\db\Query())
                ->select(['kabinet_id'])
                ->from('users_filtr')
                ->where(['IP' =>Yii::$app->request->userIP])
                ->andWhere(['user_id'=>Yii::$app->user->id])
                ->one();
            $cookies = Yii::$app->response->cookies;
            if (empty($cookies['kabinet']) && $rows){
                $userid = Yii::$app->user->id;
//получаем список кабинетов пользователя
                $kabinet= User::findOne($userid)->kabinet;
                $i=0;
                foreach ($kabinet as $litem){
             //если  кабинетов много и куки пусты, то задаем 1-ый по списку
                    if($i==0){
                        $kabinet_id=$litem->id;
                    }
                    $i++;
                }
                $cookies->add(new \yii\web\Cookie([
                    'name' => 'kabinet',
                    'value' =>$kabinet_id,
                ]));

                Yii::$app->db->createCommand()->insert('users_filtr', [
                    'IP' =>Yii::$app->request->userIP,
                    'kabinet_id' =>$kabinet_id,
                ])->execute();
            }

            return $this->goHome();

        }

и актион для изменения куков, так же находиться на SiteController


 public function actionGetcoockeikab(){
        if(Yii::$app->request->isAjax){
            $kabinet_id=Yii::$app->request->post('kabinet_id');
            $ip=Yii::$app->request->userIP;
            $user_id=Yii::$app->user->id;
            Yii::$app->db->createCommand("UPDATE users_filtr SET kabinet_id='$kabinet_id' WHERE IP='$ip' AND user_id='$user_id' ")->execute();
            $coockie=Yii::$app->response->cookies;

//Вот тут я вообще правильно ли делаю для перезаписи куков?
         
   $coockie->remove('kabinet');
            $coockie->add(new \yii\web\Cookie([
                'name' => 'kabinet',
                'value' =>$kabinet_id,
            ]));

            return Apu::findOne($kabinet_id)->name_lu;

        }
    }

И вот как должно выглядеть:
5ac0958ec76fc895697244.jpeg
Вроде все работает, но как то не так...то идеально меняется и если вывожу куки то же смена хорошо происходит, но временами хоть скока не нажимай, никакой смены не происходит.
В виджете Nav для Dropdown menu дал свой id.
Вот скрипт Ajax запроса.
$('#form_kab').children('ul').find('li').click(function () {
        var kab_id=$(this).attr('id');
        $.ajax({
            url: '/site/getcoockekab',
            type: 'post',
            dataType: 'html',
            data:{
              kabinet:kab_id
            },
            success:function (data) {
               location.reload();
            }
        });
    });

P/s с куками до этого дела не имел..
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
куки пахнут Напалеоном, храните это в localStorage
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы