2015-04-23 75 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