函数调用后清除 yii2 中的 cookie
Posted
技术标签:
【中文标题】函数调用后清除 yii2 中的 cookie【英文标题】:Clear cookies in yii2 after function call 【发布时间】:2016-07-22 05:58:05 【问题描述】:我在 yii2 中遇到了一些关于清除 cookie 的问题。当我在按钮单击上调用注销功能时,我正在尝试执行以下操作:
-
设置 authtoken,并将其过期值设置为 null
如果执行了步骤,则清除会话和 cookie
但问题是在设置 authtoken 并将其过期值设置为 null 之后,如果阻止(我正在清除会话和 cookie),控制不会受到影响。
public function actionLogout()
$userId = \Yii::$app->user->identity->id;
$restobj = new RestController();
$this->token = NuLL;
$expire = Null;
$data = ['userId'=>$userId,'token'=>$this->token,'expire'=>$expire];
$data = json_encode($data);
$authtoken = $restobj->updateItem(\app\urls\urls::setauthtoken, $data);
if($authtoken)
$session = new Session();
$session->close();
$session->destroy();
$cookies = \Yii::$app->response->cookies;
unset($cookies['user_cookies']);
Yii::$app->user->logout();
return $this->goHome();
updateItem 函数正在调用此 authtoken 函数:
<?php
namespace app\actions\userloginactions;
use Yii;
use yii\rest\ActiveController;
use app\models\Authmaster;
use yii\base\Action;
class AuthtokenAction extends Action
//function used in rest api call for user token
public function run()
$data = Yii::$app->getRequest()->getBodyParams();
$userId = $data['userId'];
$token = $data['token'];
$expire = $data['expire'];
$result = Authmaster::setauthtoken($userId,$token,$expire);
return true;
从 AuthtokenAction 调用的模型中的 setauthtoken 函数
public static function setauthtoken($userId,$token,$expire)
return Authmaster::updateAll(['token'=>$token,'expire'=>$expire],['user_id'=>$userId]);
当我单击注销按钮时,它成功地将 authtoken 和过期设置为 null,但由于 AuthtokenAction 功能,它直接显示 true,并且控制不会进入 if 块。 如果我对此进行评论并直接编写cookie清除块,则该函数调用会产生一些问题,然后cookie会被清除而没有任何问题。
【问题讨论】:
【参考方案1】:请尝试使用以下行
$cookies = Yii::$app->response->cookies;
$cookies->remove('user_cookies');
你可以试试这个吗?
if (isset($_SERVER['HTTP_COOKIE']))
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie)
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
【讨论】:
查看这个话题***.com/questions/2310558/… 谢谢,但我认为问题是使用 updateItem 调用的函数直接返回结果,在调用后跳过剩余代码,它应该将控制权转移回并将结果分配给 $authtoken 变量,这没有发生就我而言【参考方案2】:请检查以下代码以清除所有 cookie。它对我有用,希望对你也有用。
Yii::$app->cache->flush()
【讨论】:
Cookies 清除使用我的代码也可以正常工作,但前提是我注释掉该函数调用(使用 updateItem),但如果我取消注释该调用,则该函数调用的结果不会分配给 $authtoken变量,而是直接在屏幕上打印从 AuthtokenAction 返回的 true 问题是关于注销单个用户。这将删除所有用户的缓存yiiframework.com/doc/api/2.0/yii-caching-cache#flush()-detail【参考方案3】:希望这对其他人有所帮助...
$cookies = Yii::$app->response->cookies;
$cookies->remove('username');
unset($cookies['username']);
在以下引用的链接中找到:http://www.bsourcecode.com/yiiframework2/cookies-handling-in-yii-framework2-0/
【讨论】:
以上是关于函数调用后清除 yii2 中的 cookie的主要内容,如果未能解决你的问题,请参考以下文章
在进行 HTTP 调用之前使用 RestTemplate 清除 Cookie