Как получить токен CSRF в Yii без настройки файла cookie _csrf?

1

Как получить токен CSRF в Yii без установки токена _csrf? Я много пробовал, но ничего не работает. Каждый раз, когда я пытаюсь получить доступ к токену CSRF, он устанавливает cookie.

  <?//= Html::csrfMetaTags() // sets _csrf cookie. prevents Fastly CDN caching. ?>
  <?php 
    $this->registerMetaTag(['name' => 'csrf-param', 'content' => '_csrf']);
    $this->registerMetaTag(['name' => 'csrf-token', 'content' => 'xxx']);
    Yii::$app->request->csrfToken;
  ?>

Урожайность

$ curl -I http://localhost:81/xxx/web/shopping/search?q=toaster
...
Set-Cookie: _csrf=0fe1db8822f87506dd00feefb32438ffee24116b4ec717287e23422d81feb32ea%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22DkE4S5EYilTEkubAr-dWda5CV0y5XCEp%22%3B%7D; path=/; httponly

Он не устанавливает cookie, когда я комментирую Yii::$app->request->csrfToken; , Я также попытался немедленно отключить файл cookie, но он отправляет Set-Cookie: _csrf=delete; expires=Thu, 01-Jan-1970 00:00:01 GMT; Set-Cookie: _csrf=delete; expires=Thu, 01-Jan-1970 00:00:01 GMT; в браузере. Я также попытался установить $enableCsrfCookie в false, но затем он устанавливает cookie PHPSESSID.

Мне нужны метатеги CSRF для ссылки выхода, которая использует POST и Javascript для отправки. Формы работают нормально, поскольку они вставляют CSRF в теги <form>.

  • 0
    Я обнаружил, что другие формы НЕ работают нормально без куки _csrf . У меня только что был старый PHPSESSID и _csrf cookie в моем браузере. Если вы удалите эти файлы cookie из своего браузера, это выдаст ошибку Bad Request (#400) . Таким образом, вы должны найти способ сохранить cookie или сеанс на нужных страницах.
Теги:
cookies
yii2

1 ответ

1

Я обнаружил, что есть второй параметр remove() который предотвращает отправку в браузер, поэтому я могу получить токен, а затем сразу удалить cookie.

Yii::$app->response->cookies->remove('_csrf', false);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню