【问题标题】:Clear cookies in yii2 after function call函数调用后清除 yii2 中的 cookie
【发布时间】:2016-07-22 05:58:05
【问题描述】:

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

  1. 设置 authtoken,并将其过期值设置为 null
  2. 如果执行了步骤,则清除会话和 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会被清除而没有任何问题。

【问题讨论】:

    标签: php cookies yii2 logout unset


    【解决方案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, '/');
        }
    }
    

    【讨论】:

    • 谢谢,但我认为问题是使用 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/

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多