如何忘记laravel中的所有饼干?

时间:2014-09-26 12:06:34

标签: php cookies laravel

有没有人知道是否有办法忘记Laravel中的所有Cookie(嗯,所有我的网络应用)?我知道我可以通过Cookie::forget('mycookie')来摆脱一个,但如果我有十几个,我想忘记它们呢?

是否有一个简单的单行命令,如Cookie::forgetAll()或其他什么?或者我只是需要遍历我的所有cookie并逐个忘记它们?

谢谢!

PS - 我正在使用Laravel 4.1.28,但如果能有所作为,我们很乐意更新到最新版本。

3 个答案:

答案 0 :(得分:5)

要一次删除多个cookie,您可以简单地执行以下操作,当然您可以将其置于循环中:

Cookie::queue(Cookie::forget('key1'));
Cookie::queue(Cookie::forget('key2'));
return $myResponse;

通过这样做,也无需再使用cookie对象返回响应。

queue()方法使用cookie将结果排队,并将它们添加到请求的标头中。您创建cookie或删除它们并不重要。它只是工作方式!

此处查看此帖子: https://coderwall.com/p/3etfgw/deleting-cookies-in-laravel

感谢JP Camara这么棒的帖子。

答案 1 :(得分:2)

查看Laravel源代码(https://github.com/laravel/framework/blob/ef0864242e6e6f19a78f941b0710c844016ddf6e/src/Illuminate/Cookie/CookieJar.php),似乎没有一次删除所有cookie的功能,因此您只能选择循环所有cookie并删除它们一个接一个。

答案 2 :(得分:0)

要添加到@Ali答案,需要启用AddQueuedCookiesToResponse中间件

protected $middleware = [
        ...
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    ];

替代2: 我不想使用全局中间件,因为它将针对每个请求运行。可以通过使用多个withCookie

来实现
        $cookie1 = Cookie::forget('laravel_token');
        $cookie2 = Cookie::forget('laravel_session');

        return response()->json($mydata, $response)
            ->withCookie($cookie1)
            ->withCookie($cookie2);