在函数调用后清除yii2中的cookie

时间:2016-04-02 12:12:14

标签: php cookies yii2 logout unset

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

  1. 设置authtoken,其到期值为null
  2. 如果执行了步骤,则清除会话和cookie
  3. 但问题是在设置authtoken之后,它的到期值为空控制不在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]);
    }
    

    当我单击注销按钮时,它成功地将authtoken和expiration设置为null,但是由于AuthtokenAction函数它直接显示为true,并且如果阻塞,则控件不会被置于 该函数调用正在创建一些问题,如果我评论并直接写cookie清除块然后cookie被清除没有任何问题。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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, '/');
    }
}

答案 2 :(得分:1)

希望这有助于其他人......

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

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