如何在不设置_csrf cookie的情况下在Yii中获取CSRF令牌?

时间:2015-11-12 05:05:57

标签: php cookies yii2

如何在不设置_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

我在评论Yii::$app->request->csrfToken;时没有设置Cookie。我之后也尝试过立即取消设置cookie,但它会向浏览器发送Set-Cookie: _csrf=delete; expires=Thu, 01-Jan-1970 00:00:01 GMT;。我还尝试将$enableCsrfCookie设置为false,然后设置PHPSESSID Cookie。

我需要注销链接的CSRF元标记,它使用POST和Javascript提交。表单工作正常,因为他们将CSRF插入<form>标记。

1 个答案:

答案 0 :(得分:1)

我发现remove()有第二个参数阻止发送到浏览器,因此我可以获取令牌,然后立即删除cookie。

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