有没有人知道是否有办法忘记Laravel中的所有Cookie(嗯,所有我的网络应用)?我知道我可以通过Cookie::forget('mycookie')
来摆脱一个,但如果我有十几个,我想忘记它们呢?
是否有一个简单的单行命令,如Cookie::forgetAll()
或其他什么?或者我只是需要遍历我的所有cookie并逐个忘记它们?
谢谢!
PS - 我正在使用Laravel 4.1.28,但如果能有所作为,我们很乐意更新到最新版本。
答案 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);