Yii2 Cookie 不生成

Yii2 Cookie not generating

我正在尝试设置 cookie,但未保存 cookie。以下是我尝试过的:

$cookies = Yii::$app->response->cookies;

$cookies->add(new \yii\web\Cookie([
        'name' => 'abc',
        'value' => 'xyz',
        'expire' => time() + 86400 * 365,
]));

$cookies1 = Yii::$app->request->cookies;

if ($cookies1->has('abc'))
        $cookieValue = $cookies1->getValue('abc');

echo 'value : '.$cookieValue;

echo '<pre>'; print_r($_COOKIE);

$cookieValue 没有任何价值。未生成 Cookie。我做错了什么?

你的代码没问题。您的问题是您试图在同一请求 中设置并获取cookie

您的浏览器尚未收到响应,因此在您尝试读取之前它还没有机会添加 cookie。

您只需在单独的请求中设置并获取 cookie:

public function actionSetCookie() {

    $cookies = Yii::$app->response->cookies;

    $cookies->add(new \yii\web\Cookie([
        'name' => 'abc',
        'value' => 'xyz',
        'expire' => time() + 86400 * 365,
    ]));

    echo 'Cookie set!';
}

public function actionGetCookie() {

    $cookies1 = Yii::$app->request->cookies;

    if ($cookies1->has('abc'))
        $cookieValue = $cookies1->getValue('abc');

    echo 'value : '.$cookieValue;
}

Set your cookie like this

$cookie = Yii::$app->response->cookies;

$cookie = new \yii\web\Cookie
  ([
        'name' => 'abc',
        'value' => 'xyz',
        'expire' => time() + 86400 * 365,
  ]);

Yii::$app->getResponse()->getCookies()->add($cookie);

//check cookie is exist or not

if(Yii::$app->getRequest()->getCookies()->has('abc'))
{
     // if exist then get cookie value
     $username =  Yii::$app->getRequest()->getCookies()->getValue('abc');
}

只是把我的答案放在这里,因为多次访问这个问题但找不到解决方案。我花了一整天的时间来解决它。所以希望这个回答能对某人有所帮助。

在我的例子中,我使用了从前端发送请求的 axios 包,我在 header 中得到了响应 Set-Cookie 但没有保存在浏览器中。所以设置 axios.defaults.withCredentials = true; 解决了我的问题。