2016-04-02 8 views
1

yii2のクッキーをクリアすることに関するいくつかの問題に直面しています。私は、次の操作を実行しようとしていますクリックボタンにログアウト機能を呼び出していた場合:関数呼び出しの後にyii2のクッキーを消去する

  1. authTokenの設定、およびその有効期限の値をステップが行われ、その後明確なセッションとクッキー
を得た場合
  • をゼロにするために

    しかし、問題は、authtokenとその有効期限の値をnullに設定した後です。制御はブロックの下にはありません(私はセッションとクッキーをクリアしています)。 AuthtokenAction

    public static function setauthtoken($userId,$token,$expire) 
    { 
        return Authmaster::updateAll(['token'=>$token,'expire'=>$expire],['user_id'=>$userId]); 
    } 
    

    からというモデルで

    <?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; 
    } 
    } 
    

    setauthtoken機能私はログアウトボタンをクリックしたときに、それが正常にnullに持つAuthTokenと有効期限を設定します。

    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関数を呼び出していますAuthtokenAction関数の結果としてtrueを直接表示し、制御がブロックの下には行かない。 私はそれをコメントしてブロックを直接クリアしてからクッキーが問題なくクリアされると、その関数呼び出しは何らかの問題を作り出しています。

  • 答えて

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

    感謝。 –

    +0

    このスレッドをチェックするhttp://stackoverflow.com/questions/2310558/how-to-delete-all-cookies-of-my-website-in-php –

    +0

    ありがとうございます。問題は、updateItemを直接使用して呼び出される関数が、結果はその呼び出しの後に残りのコードをスキップして、制御を戻して、私のケースでは起こらない$ authtoken変数に結果を代入する必要があります。 –

    3

    すべてのCookieを消去するには、次のコードを確認してください。それは私のために働いています、希望もあなたのために働くでしょう。これは他の人を助け

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

    クッキーの消去は、自分のコードを使ってうまくいきますが、 (updateItemを使用して)コールしますが、そのコールのコメントを外すと、その関数呼び出しの結果は$ authtoken変数に代入されず、代わりにAuthtokenActionから返される画面に直接trueを出力します –

    関連する問題