【问题标题】:Cookie::forget not working laravel 5.1Cookie::forget 不工作 laravel 5.1
【发布时间】:2020-07-28 16:27:30
【问题描述】:

我正在尝试让 Laravel 5.1 删除我的 cookie,但是即使我通过重定向返回它,它也不会删除。

return redirect('/voucher')->withCookie(Cookie::forget($cookie));

我做错了吗?

【问题讨论】:

  • $cookie 的值是多少?

标签: php laravel laravel-5.1


【解决方案1】:

也许我错了,但您在调用Cookie::forget($cookie) 时可能使用cookie 对象代替cookie 名称。除非$cookie 是一个包含 cookie 名称的字符串,否则您应该尝试这样的操作:

return redirect('/voucher')->withCookie(Cookie::forget('cookie_name'));

【讨论】:

    【解决方案2】:

    我知道这已经是一个古老且已回答的问题,但我最近才来到这里,如果我是正确的,cookie 需要为下一个响应“排队”。

    您可以通过手动将 cookie 添加到响应中来做到这一点,正如@Jan.J 在他的回答中已经描述的那样。但是,如果您需要内联,这也可能对您有用:

    Cookie::queue(
        Cookie::forget('cookieName')
    );
    

    CookieJar 会将所有排队的 cookie 传递给下一个响应。

    【讨论】:

    • 你拯救了我的一天。这对我来说是非常不寻常的语法=\
    【解决方案3】:

    在我的例子中,cookie 中存储了一个array,因此提供的方法都不起作用。应该删除数组,提供恰好一对数组:

    Cookie::queue(Cookie::forget('array_name[provide_key]'));
    

    【讨论】:

      【解决方案4】:

      首先,确保您已使用 use 关键字导入 Cookie class,如下所示:

      use Cookie;
      

      接下来,按名称

      创建一个函数并删除一个cookie
      Cookie::queue(
        Cookie::forget('cookie_name_first')
      );
      
      Cookie::queue(
        Cookie::forget('cookie_name_second')
      );
      

      【讨论】:

        【解决方案5】:

        公共函数名称(CookieJar $cookie)

            session()->flush();
        

        $cookie->queue(cookie()->forget('user_email')); $cookie->queue(cookie()->forget('user_password'));

        return redirect('/');
        

        【讨论】:

          【解决方案6】:

          不幸的是,以上方法都不适用于我,我不确定这是否是这个版本的 Laravel (5.1) 的特定问题。

          我确实设法使用原始 PHP 让它工作,通过用一个已经过期的 cookie 覆盖现有的 cookie,我还必须指定一个路径来让它工作。然而,它不像使用门面那么优雅。

          setcookie('COOKIE_NAME', time() - 3600, '/');
          

          【讨论】:

            【解决方案7】:

            你也可以这样做:

            redirect('/')->cookie(cookie()->forget('my_super_cookie_name'));
            

            【讨论】:

              【解决方案8】:

              最近我在本地主机上遇到了这个问题,但问题是我编写了一些代码,这些代码在我尝试覆盖会话配置文件的过程中是不正常的。 所以 默认的laravel

              Cookie::queue(
                 Cookie::forget('name')
                    ) ;
              

              如果您没有对您的设备进行任何更改,应该可以正常工作 session.php 配置文件。 检查一下,你应该很高兴。 如果您进行了一些更改,请尝试确保您的代码符合标准并且一切正常。

              【讨论】:

                【解决方案9】:

                你的代码很完美,所以还有其他问题。

                Cookie 是个小技巧 ^##$$,更糟糕的是,它依赖于客户端的实现;不同的浏览器可能会以不同的方式处理 cookie 边缘情况,甚至可能有 long-standing bugs 与它们的 cookie 处理有关。

                cookie 的“删除”实际上涉及向 cookie 发送更新,但过期日期已过。来自rfc 6265

                最后,为了移除一个cookie,服务器返回一个Set-Cookie header 过期日期在过去。服务器会成功 仅当 Path 和 Domain 属性在 Set-Cookie 标头匹配 cookie 时使用的值 已创建。

                如果您的 Laravel 代码看起来不错,如原始问题所示,我建议您在浏览器的开发工具中检查您的 cookie。例如,Chrome 的“网络”选项卡有一个“Cookies”选项卡,显示请求 Cookie 和响应 Cookie。您可能会发现原始 cookie 和发送来取消设置的 cookie 之间存在细微差别。根据上面的 RFC,域中的差异(甚至只是一个前导点)会破坏 cookie 的删除。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-07-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-03
                  • 2016-05-02
                  • 1970-01-01
                  • 2015-09-17
                  • 1970-01-01
                  相关资源
                  最近更新 更多