Yii2 Cookie 不生成
Yii2 Cookie not generating
我正在尝试设置 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。我做错了什么?
你的代码没问题。您的问题是您试图在同一请求 中设置并获取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;
}
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');
}
只是把我的答案放在这里,因为多次访问这个问题但找不到解决方案。我花了一整天的时间来解决它。所以希望这个回答能对某人有所帮助。
在我的例子中,我使用了从前端发送请求的 axios
包,我在 header 中得到了响应 Set-Cookie
但没有保存在浏览器中。所以设置 axios.defaults.withCredentials = true;
解决了我的问题。
我正在尝试设置 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。我做错了什么?
你的代码没问题。您的问题是您试图在同一请求 中设置并获取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;
}
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');
}
只是把我的答案放在这里,因为多次访问这个问题但找不到解决方案。我花了一整天的时间来解决它。所以希望这个回答能对某人有所帮助。
在我的例子中,我使用了从前端发送请求的 axios
包,我在 header 中得到了响应 Set-Cookie
但没有保存在浏览器中。所以设置 axios.defaults.withCredentials = true;
解决了我的问题。