17

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

返回重定向('/voucher')->with Cookie(Cookie::forget($Cookie));

我做错什么了吗?

1

9个答案9

重置为默认值
30

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

使用Cookie返回重定向('/voucher')->(Cookie::forget('Cookie_name'));
22

我知道这已经是一个老生常谈的问题了,但我最近才来到这里,如果我是正确的,cookie需要“排队”等待下一个响应。

您可以通过手动将cookie添加到响应中来实现这一点,@Jan.J已经在他的回答中描述了这一点。但如果您需要内联,这可能也适用于您:

Cookie::队列(Cookie::forget('cookieName'));

这个CookieJar饼干罐将把所有排队的cookie传递给下一个响应。

1
  • 2
    你拯救了我的一天。这对我来说是很不寻常的语法=\
    – 胜利者
    评论 2017年3月6日16:11
6

就我而言阵列存储在cookie中,因此提供的方法都不起作用。应删除数组,提供正好一对数组:

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

首先,确保已导入Cookie类具有使用关键字,如下所示:

使用Cookie;

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

Cookie::队列(Cookie::forget('Cookie_name_first'));Cookie::队列(Cookie::forget('Cookie_name_second'));
0

公共函数funname(CookieJar$cookie)

session()->flush();

$cookie->队列(cookie()->遗忘('user_email'));$cookie->队列(cookie()->忘记('user_password'));

返回重定向('/');
0

不幸的是,以上这些都不适合我,我不确定这是否是这个版本的拉拉维勒(5.1)的具体问题。

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

setcookie('COOKIE_NAME',时间()-3600,'/');
0

您也可以这样做:

重定向('/')->cookie(cookie()->忘记('my_super_cookie_name'));
0

最近,我在localhost上遇到了这个问题,但问题是我编写了一些代码,这些代码在我试图覆盖会话配置文件的过程中并不正常。因此默认laravel

Cookie::队列(Cookie::forget('name')) ;

如果您没有对您的session.php配置文件。看看吧,你应该可以走了。如果您做了一些更改,请尝试确保您的代码符合标准,并且一切都应该正常工作。

0

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

Cookie很棘手,小^##$$,让事情变得更糟取决于客户端的实现;不同的浏览器可能会以不同的方式处理cookie边缘情况,甚至可能已经长期存在的错误与他们的cookie处理有关。

cookie的“删除”实际上涉及到向cookie发送更新,但过期日期在过去。发件人副本请求6265:

最后,为了删除cookie,服务器返回Set-cookie头过期日期在过去。服务器将成功仅当中的Path和Domain属性Set-Cookie标头与Cookie创建。

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

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.