2015-04-23 77 views
1

我正在尝试设置Cookie,但Cookie未保存。以下是我所尝试的:Yii2不生成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未生成。我究竟做错了什么?

回答

2

你的代码没问题。你的问题是你正在尝试设置,然后在相同的请求中获取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; 
} 
+0

我只是这样做的方式。我在控制器操作中设置了cookie,然后在渲染的视图标题中尝试打印cookie值。但是,当我刷新页面时,它第一次不包含任何值,那么cookie包含该值。 – Chinmay

+1

你并不完全了解我,你需要**分开**请求。在控制器中执行代码然后渲染视图**仍然是相同的请求**。 – deacs

+0

雅得到它。谢谢你解释 – Chinmay

0

​​

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

嗨Vidya。这个问题与创建/设置cookie无关。我在同一个请求中设置和访问cookie的值,这是不可能的。正如@deacs所提到的,您需要单独请求访问cookie的值。无论如何感谢您的回答! – Chinmay

+0

那么,你的问题解决了,这是主要的问题。但我正在设置和访问相同功能的Cookie。所以我想告诉你,它可能在同一个功能,尝试一次。 – Vidya

+0

好的。会尝试。谢谢 :) – Chinmay