Yii2 Cookie没有生成

时间:2015-04-23 11:58:32

标签: cookies yii2 setcookie yii2-advanced-app

我正在尝试设置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未生成。我做错了什么?

3 个答案:

答案 0 :(得分:2)

你的代码很好。您的问题是,您尝试设置然后在同一请求中获取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;
}

答案 1 :(得分:0)

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');
}

答案 2 :(得分:0)

请输入我的答案,因为有几次访问了此问题,但找不到解决方案。我花了一整天来解决它。因此,希望这个答案对您有所帮助。

在我的情况下,我使用了axios程序包,该程序包从前端发送了请求,并且在标头中得到了响应Set-Cookie,但没有保存在浏览器中。因此设置axios.defaults.withCredentials = true;解决了我的问题。