函数调用后清除 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的主要内容,如果未能解决你的问题,请参考以下文章

Yii2-设置和获取删除Cookies空值分析(有代码)

YII2中自己写的自定义函数怎么调用

在进行 HTTP 调用之前使用 RestTemplate 清除 Cookie

在 Spotify(Javascript)中进行 ajax 调用后没有保存 Cookie?

关于Java中的形参和实参的区别

函数调用方式__stdcall__cdel