【问题标题】:Yii2 Cookies not being removedYii2 Cookie 没有被删除
【发布时间】:2016-02-14 20:23:54
【问题描述】:

所以我很难理解 Yii2 中如何管理 cookie 的概念。我看到一些资源说要通过以下方式设置 cookie:

Yii::$app->response->cookies->add(new Cookie([
    'name' => 'some_cookie_name',
    'value' => 'some cookie value',
    'domain' => ( YII_ENV_DEV )? '.dev.example.co.uk' : '',
    'expire' => time() + (60*60*24*30) // Expire in 30 days time
]));

这很好用,但在删除 cookie 时使用:

Yii::$app->response->cookies->remove('some_cookie_name');

它不起作用。 cookie 保留在浏览器中。

为了确认,删除cookie后会有重定向。

我正在查看的资源是:http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html#cookies

【问题讨论】:

    标签: cookies yii2


    【解决方案1】:

    这对我有用,如果你想从子域中删除 cookie,你需要指定应该删除那个 cookie 的域

        unset($_COOKIE['cookie_name']);
        setcookie('cookie_name', null, -1, '/','your_domain.com');
    

    【讨论】:

      【解决方案2】:

      以下方法效果最好:

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

      引用自 YII framework2.o 中的 cookie 处理见以下链接 http://www.bsourcecode.com/yiiframework2/cookies-handling-in-yii-framework2-0/

      【讨论】:

        【解决方案3】:

        试试这个删除cookie的代码:

        Yii::$app->response->cookies->remove(new Cookie([
            'name' => 'some_cookie_name',
            'domain' => ( YII_ENV_DEV )? '.dev.example.co.uk' : '',
        ]));
        

        作为reference link

        remove()方法可以给yii\web\Cookie | string

        如果你在设置cookie时没有定义domain。默认使用当前域名(前缀不带.)。所以当你想删除它时。只是你可以使用这个:

        Yii::$app->response->cookies->remove('some_cookie_name');
        

        但是如果你在设置cookie的时候定义了domain,那么你应该在remove方法中通过传递一个对象而不是字符串来定义它,就像这样:

        Yii::$app->response->cookies->remove(new Cookie([
            'name' => 'some_cookie_name',
            'domain' => 'your-domain.com',
        ]));
        

        【讨论】:

          【解决方案4】:

          请试试这个

          创建一个 cookie

           $cookie = new Cookie( [
                                  'name'   => 'some_cookie_name',
                                  'value'  => some cookie value,
                                  'expire' => time() + 86400 * 365,
                              ] );
             \Yii::$app->getResponse()->getCookies()->add( $cookie );
          

          删除 cookie

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

          【讨论】:

          • 请改进这个答案。为什么有人会点击那个链接?
          猜你喜欢
          • 2012-09-22
          • 2016-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-10
          • 1970-01-01
          • 2011-08-06
          • 1970-01-01
          相关资源
          最近更新 更多