Cookie::forget 不工作 laravel 5.1

Cookie::forget not working laravel 5.1

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

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

我是不是做错了什么?

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

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

我知道这已经是一个已回答的老问题,但我最近才来到这里,如果我是正确的,下一次回复的 cookie 需要 'queued'。

您可以通过手动将 cookie 添加到响应中来做到这一点,@Jan.J 已在他的回答中进行了描述。但是,如果您需要在线执行此操作,这也可能对您有用:

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

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

在我的例子中,cookie 中存储了一个 array,因此 none 提供的方法有效。数组应该被删除提供恰好一对数组:

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

public 函数 funname(CookieJar $cookie)

    session()->flush();

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

return redirect('/');

你也可以这样做:

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

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

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

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

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

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

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

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

use Cookie;

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

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

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

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

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

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

Finally, to remove a cookie, the server returns a Set-Cookie header with an expiration date in the past. The server will be successful in removing the cookie only if the Path and the Domain attribute in the Set-Cookie header match the values used when the cookie was created.

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