Удаление куки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Удаление куки

Сообщение quasar » 2019.04.06, 20:47

Здравствуйте не могу удалить куку.
Вот задаю ее:

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

$cookies = Yii::$app->response->cookies;
            $cookies->add(new \yii\web\Cookie([
                'name' => 'refId',
                'value' => $refId,
            ]));
Теперь пытаюсь удалить в другом методе класса:

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

$cookies = Yii::$app->request->cookies;
        unset($cookies['refId']);
Кидает исключение что кука только для чтения. При распечатке содержимого параметр readOnly = true Как удалить куку?

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

object(yii\web\CookieCollection)#50 (2) {
  ["readOnly"]=>
  bool(true)
  ["_cookies":"yii\web\CookieCollection":private]=>
  array(2) {
    ["_csrf-frontend"]=>
    object(yii\web\Cookie)#56 (7) {
      ["name"]=>
      string(14) "_csrf-frontend"
      ["value"]=>
      string(32) "P_KkIQC6Zh8oNI4hI4wK11iJBhH-3ITE"
      ["domain"]=>
      string(0) ""
      ["expire"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["secure"]=>
      bool(false)
      ["httpOnly"]=>
      bool(true)
    }
    ["refId"]=>
    object(yii\web\Cookie)#55 (7) {
      ["name"]=>
      string(5) "refId"
      ["value"]=>
      int(7)
      ["domain"]=>
      string(0) ""
      ["expire"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["secure"]=>
      bool(false)
      ["httpOnly"]=>
      bool(true)
    }
  }
}

Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

Re: Удаление куки

Сообщение Seagull » 2019.04.06, 21:59

https://www.yiiframework.com/doc/guide/ ... ng-cookies
Удалять тоже из response'а надо.

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Удаление куки

Сообщение quasar » 2019.04.06, 22:08

Seagull писал(а):
2019.04.06, 21:59
https://www.yiiframework.com/doc/guide/ ... ng-cookies
Удалять тоже из response'а надо.
Попытки удалить через респонс методом ремув приводят к тому же исключению что кука только для чтения. Я думаю как то надо переключить в куке параметр readOnly в false... В каких случаях оно ставится в true это жду ответ от специалистов.

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

Re: Удаление куки

Сообщение futbolim » 2019.04.06, 22:27

Yii::$app->response->cookies->remove()

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Удаление куки

Сообщение quasar » 2019.04.06, 22:35

futbolim писал(а):
2019.04.06, 22:27
Yii::$app->response->cookies->remove()
Я так понимаю это грохнет все куки. А мне надо удалить всего лишь одно поле.

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

Re: Удаление куки

Сообщение futbolim » 2019.04.06, 23:08

Господи, посмотрите документацию. Вы сидите и ждёте ответа?
Yii::$app->response->cookies->remove(ТУТ ИМЯ КУКИ ИЛИ ЕЁ ОБЪЕКТ)

Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

Re: Удаление куки

Сообщение Seagull » 2019.04.06, 23:18

Уверены, что удаляете через Response?:

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

    public function getCookies()
    {
        if ($this->_cookies === null) {
            $this->_cookies = new CookieCollection();
        }
        return $this->_cookies;
    }
А не через Request:

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

    public function getCookies()
    {
        if ($this->_cookies === null) {
            $this->_cookies = new CookieCollection($this->loadCookies(), [
                'readOnly' => true,
            ]);
        }
        return $this->_cookies;
    }

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

Re: Удаление куки

Сообщение futbolim » 2019.04.07, 01:04

Seagull писал(а):
2019.04.06, 23:18
Уверены, что удаляете через Response?:

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

    public function getCookies()
    {
        if ($this->_cookies === null) {
            $this->_cookies = new CookieCollection();
        }
        return $this->_cookies;
    }
А не через Request:

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

    public function getCookies()
    {
        if ($this->_cookies === null) {
            $this->_cookies = new CookieCollection($this->loadCookies(), [
                'readOnly' => true,
            ]);
        }
        return $this->_cookies;
    }
Он пытается удалить private поле, а не через геттер

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Удаление куки

Сообщение quasar » 2019.04.07, 08:34

Всем спасибо! Разобрался.

Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

Re: Удаление куки

Сообщение Seagull » 2019.04.07, 12:00

quasar писал(а):
2019.04.07, 08:34
Всем спасибо! Разобрался.
И что по итогу?

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Удаление куки

Сообщение quasar » 2019.04.09, 19:59

Seagull писал(а):
2019.04.07, 12:00
quasar писал(а):
2019.04.07, 08:34
Всем спасибо! Разобрался.
И что по итогу?
По итогу сработало Yii::$app->response->cookies->remove(ТУТ ИМЯ КУКИ ИЛИ ЕЁ ОБЪЕКТ) я допустил опечатку в коде и поэтому не понимал где лезет ошибка.

Ответить