Cookie ::忘了不工作laravel 5.1

时间:2015-08-11 12:22:57

标签: php laravel laravel-5.1

我试图让Laravel 5.1删除我的Cookie,但即使我使用我的重定向返回它也不会删除。

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

我做错了吗?

9 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:13)

我知道这已经是一个陈旧且回答的问题,但我最近到了这里,如果我是正确的,那么cookie需要排队等待下一个回复。

您可以通过在答案中已经描述的@ Jan.J手动将cookie添加到响应中来实现。但如果您需要内联,这可能对您有用:

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

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

答案 2 :(得分:3)

在我的情况下,cookie中存储了array,因此提供的方法都没有。应删除数组,提供完全一对数组:

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

答案 3 :(得分:1)

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

use Cookie;

接下来,创建一个函数并删除按名称

的cookie
Cookie::queue(
  Cookie::forget('cookie_name_first')
);

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

答案 4 :(得分:0)

公共功能funname(CookieJar $ cookie)

Button = sender as Button;
                    string content = button.Content.ToString();
                    foreach (DataTable table in dsr.Tables)
                    {
                        if (table.TableName == content)
                        {
                            dataGrid1.ItemsSource = table.DefaultView;
                            dtselect = table;
                        }
                    }

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

    session()->flush();

答案 5 :(得分:0)

您也可以这样操作:

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

答案 6 :(得分:0)

不幸的是,以上都不对我有用,我不确定此版本的Laravel(5.1)是否是特定问题。

我确实设法使用原始PHP来使其工作,通过用已经过期的cookie覆盖现有的cookie,我还必须指定一个路径来使其工作。但是,它不像使用外墙那样优雅。

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

答案 7 :(得分:0)

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

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

如果您未进行任何更改,则应该可以正常工作     session.php配置文件。  检查出来,你应该很好。 如果进行了一些更改,请尝试确保您的代码符合标准,并且一切正常。

答案 8 :(得分:0)

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

Cookie有点棘手,而使事情变得更糟的是取决于客户端的实现;各种浏览器可能会以不同的方式处理cookie边缘情况,甚至可能有long-standing bugs与它们的cookie处理有关。

“删除” Cookie实际上涉及向该Cookie发送更新,但具有过去的到期日期。来自rfc 6265

最后,要删除Cookie,服务器将返回Set-Cookie标头 过期日期为过去的日期。服务器将成功 仅在路径和域属性位于 Set-Cookie标头与Cookie为 已创建。

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