簡體   English   中英

如何在Yii2中設置Cookie的純值(無json)

[英]How can I set plain value (no json) for cookie in Yii2

我使用此代碼在Yii2設置cookie:

$cookies = Yii::$app->response->cookies;
$cookies->add(new \yii\web\Cookie([
    'name' => 'googtrans',
    'value' => '//fa',
    'expire' => time()+(60*60*24*365),
]));

當我在瀏覽器中檢查cookie管理器時,會看到以下內容:

378abb4ba4b3ed4bd5fa0918a34e0ba6c4042aecd590d167d76f6a901660d082a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22googtrans%22%3Bi%3A1%3Bs%3A4%3A%22%2F%2Ffa%22%3B%7D

解碼后,我看到:

378abb4ba4b3ed4bd5fa0918a34e0ba6c4042aecd590d167d76f6a901660d082a:2:{i:0;s:9:"googtrans";i:1;s:4:"//fa";}

似乎, Yii2自動將Cookie數據轉換為JSON格式。

但是我不需要這個,我想要一個具有googtrans名稱和//fa值的cookie值。
(我知道PHP核心中的$_COOKIE ,但我想使用Yii)

我該怎么做?

不是JSON 它在散列之前使用PHP的serialize方法:

// retrieved from yii\web\Response::sendCookies()
$value = $cookie->value;
if ($cookie->expire != 1  && isset($validationKey)) {
    $value = Yii::$app->getSecurity()->hashData(serialize([$cookie->name, $value]), $validationKey);
}
setcookie($cookie->name, $value, $cookie->expire, $cookie->path, $cookie->domain, $cookie->secure, $cookie->httpOnly);

在此處查看完整代碼。

問題是,只要將$ enableCookieValidation設置為true(默認情況下就是這種情況),Yii就會這樣做以驗證接收到的cookie是否受到篡改。

因此,您可能需要使用以下配置完全禁用內置的Cookie驗證:

'request' => [
    'enableCookieValidation' => false,
    'enableCsrfValidation' => false,
]

我不推薦使用它,因為出於安全原因需要以這種方式進行構建。 要在Yii應用程序內的任何位置解碼cookie的值,您始終可以按照官方文檔中的說明進行操作

$cookies = Yii::$app->request->cookies;
if (($cookie = $cookies->get('googtrans')) !== null) {
    $googtrans = $cookie->value;
}

否則,如果您需要的是客戶端能夠讀取某些cookie的真實值,那么我建議使用$_COOKIE來直接設置/獲取它,這也是其創建者在此處建議的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM