【问题标题】:How to forget all cookies in laravel?如何忘记laravel中的所有cookie?
【发布时间】:2020-06-12 14:39:56
【问题描述】:

有谁知道是否有办法忘记 Laravel 中的所有 cookie(好吧,全部用于我的网络应用程序)?我知道我可以通过 Cookie::forget('mycookie') 摆脱一个,但如果我有十几个左右,我想忘记它们怎么办?

有没有像Cookie::forgetAll() 之类的简单的单行命令?还是我只需要遍历我所有的 cookie 并一一忘记它们?

谢谢!

PS - 我正在使用 Laravel 4.1.28,但如果有任何不同,我很乐意更新到最新版本。

【问题讨论】:

    标签: php cookies laravel


    【解决方案1】:

    要一次删除多个 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 发了这么好的帖子。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 明白。这就是生活——我想我只需要循环。感谢您的回答。
      【解决方案3】:

      要添加到@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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-11
        • 2021-07-04
        • 2019-11-03
        • 1970-01-01
        • 2011-07-13
        • 2018-03-27
        • 1970-01-01
        • 2023-02-22
        相关资源
        最近更新 更多