[英]How can I set max selection for Yii2 ActiveForm dropDownList?
[英]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.