Страница 1 из 1

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

Добавлено: 2019.04.06, 20:47
quasar
Здравствуйте не могу удалить куку.
Вот задаю ее:

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

$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)
    }
  }
}

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

Добавлено: 2019.04.06, 21:59
Seagull
https://www.yiiframework.com/doc/guide/ ... ng-cookies
Удалять тоже из response'а надо.

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

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

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

Добавлено: 2019.04.06, 22:27
futbolim
Yii::$app->response->cookies->remove()

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

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

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

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

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

Добавлено: 2019.04.06, 23:18
Seagull
Уверены, что удаляете через 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;
    }

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

Добавлено: 2019.04.07, 01:04
futbolim
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 поле, а не через геттер

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

Добавлено: 2019.04.07, 08:34
quasar
Всем спасибо! Разобрался.

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

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

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

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