函数调用后清除yii2中的cookie


Clear cookies in yii2 after function call

我在yii2中遇到了一些关于清除cookie的问题。当我点击按钮调用注销功能时,我正在尝试执行以下操作:

  1. 将authtoken及其过期值设置为null
  2. 如果执行了步骤,则清除会话和cookie

但问题是在将authtoken及其过期值设置为null之后,if块(我正在清除会话和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]);
}

当我点击logout按钮时,它成功地将authtoken和expiration设置为null,但由于AuthtokenAction函数的作用,它直接显示true,并且控制不在if块下。这个函数调用产生了一些问题,如果我评论并直接写cookie清除块,那么cookie就会被清除,没有任何问题。

请检查以下代码以清除所有cookie。它对我有效,希望对你也有效。

Yii::$app->cache->flush()

请尝试使用以下行

$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, '/');
    }
}

希望这能帮助其他人。。。

    $cookies = Yii::$app->response->cookies;
    $cookies->remove('username');
    unset($cookies['username']);

在以下引用的链接中找到:http://www.bsourcecode.com/yiiframework2/cookies-handling-in-yii-framework2-0/