Yii2 Cookies未被删除

时间:2015-11-13 09:33:59

标签: cookies yii2

因此,我正在努力解决如何在Yii2中管理cookie的概念。我已经看到一些资源说通过以下方式设置cookie:

revealViewController!.rearViewRevealWidth=self.view.frame.size.width-100 //customize the width/space

这很好,但是在使用以下方法删除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仍保留在浏览器中。

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

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

4 个答案:

答案 0 :(得分:1)

请试试这个

创建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' );

答案 1 :(得分:1)

尝试使用此代码删除Cookie:

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

作为https://stackoverflow.com/a/37573913/1828764

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',
]));

答案 2 :(得分:0)

以下效果最佳:

$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 :(得分:0)

这对我有用,如果您想从子域中删除Cookie,则需要指定该域,这应该删除该Cookie

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