【发布时间】:2020-07-28 16:27:30
【问题描述】:
我正在尝试让 Laravel 5.1 删除我的 cookie,但是即使我通过重定向返回它,它也不会删除。
return redirect('/voucher')->withCookie(Cookie::forget($cookie));
我做错了吗?
【问题讨论】:
-
$cookie 的值是多少?
标签: php laravel laravel-5.1
我正在尝试让 Laravel 5.1 删除我的 cookie,但是即使我通过重定向返回它,它也不会删除。
return redirect('/voucher')->withCookie(Cookie::forget($cookie));
我做错了吗?
【问题讨论】:
标签: php laravel laravel-5.1
也许我错了,但您在调用Cookie::forget($cookie) 时可能使用cookie 对象代替cookie 名称。除非$cookie 是一个包含 cookie 名称的字符串,否则您应该尝试这样的操作:
return redirect('/voucher')->withCookie(Cookie::forget('cookie_name'));
【讨论】:
我知道这已经是一个古老且已回答的问题,但我最近才来到这里,如果我是正确的,cookie 需要为下一个响应“排队”。
您可以通过手动将 cookie 添加到响应中来做到这一点,正如@Jan.J 在他的回答中已经描述的那样。但是,如果您需要内联,这也可能对您有用:
Cookie::queue(
Cookie::forget('cookieName')
);
CookieJar 会将所有排队的 cookie 传递给下一个响应。
【讨论】:
在我的例子中,cookie 中存储了一个array,因此提供的方法都不起作用。应该删除数组,提供恰好一对数组:
Cookie::queue(Cookie::forget('array_name[provide_key]'));
【讨论】:
首先,确保您已使用 use 关键字导入 Cookie class,如下所示:
use Cookie;
接下来,按名称
创建一个函数并删除一个cookieCookie::queue(
Cookie::forget('cookie_name_first')
);
Cookie::queue(
Cookie::forget('cookie_name_second')
);
【讨论】:
公共函数名称(CookieJar $cookie)
session()->flush();
$cookie->queue(cookie()->forget('user_email')); $cookie->queue(cookie()->forget('user_password'));
return redirect('/');
【讨论】:
不幸的是,以上方法都不适用于我,我不确定这是否是这个版本的 Laravel (5.1) 的特定问题。
我确实设法使用原始 PHP 让它工作,通过用一个已经过期的 cookie 覆盖现有的 cookie,我还必须指定一个路径来让它工作。然而,它不像使用门面那么优雅。
setcookie('COOKIE_NAME', time() - 3600, '/');
【讨论】:
你也可以这样做:
redirect('/')->cookie(cookie()->forget('my_super_cookie_name'));
【讨论】:
最近我在本地主机上遇到了这个问题,但问题是我编写了一些代码,这些代码在我尝试覆盖会话配置文件的过程中是不正常的。 所以 默认的laravel
Cookie::queue(
Cookie::forget('name')
) ;
如果您没有对您的设备进行任何更改,应该可以正常工作 session.php 配置文件。 检查一下,你应该很高兴。 如果您进行了一些更改,请尝试确保您的代码符合标准并且一切正常。
【讨论】:
你的代码很完美,所以还有其他问题。
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 的删除。
【讨论】: