【问题标题】:Setting Cookies in Laravel 4 only works in App::after()在 Laravel 4 中设置 Cookie 仅适用于 App::after()
【发布时间】:2013-11-30 03:58:21
【问题描述】:

我尝试在 Laravel 4 中的特定路线中设置 Cookie

很遗憾,设置 Cookie 仅在全局 App::after() 过滤器中有效。

我尝试的第一件事是从我的Controller 回复Cookie

这不起作用:

return Response::make($view)->withCookie(Cookie::make('foo','bar'));

但是,这样做:

return Response::make()->withCookie(Cookie::make('foo','bar'));

但不能解决我的问题。

接下来我尝试使用after 过滤器,如下所示。

Route::filter('cookie', function($route, $request, $response)
{
    $response->withCookie(Cookie::make('foo', 'bar'));
});

这也不起作用。

接下来,我使用 Cookie::queue() 尝试了它,我在另一个 answer 中找到了它 - 没有运气。

正确设置 Cookie 的唯一位置是 App::after()

App::after(function($request, $response)
{
    $response->withCookie(Cookie::make('foo', 'bar'));
});

除了我很确定其他方法之一应该可以工作之外,这个解决方案并没有给我我正在寻找的控制。

我正在运行 Laravel v4.0.9。

【问题讨论】:

  • 您是如何尝试访问 cookie 的?请记住,在 下一个 页面加载之前,cookie 不可用。这就是 cookie 的工作原理,与框架实现无关。
  • 我使用(浏览器)Web Inspector 来检查是否设置了 cookie。
  • 我认为问题是当您设置 cookie 'before' 时,尚未创建响应对象。然后在您的控制器中,您创建一个“新” Response::return() 等 - 因此任何先前的值都将被覆盖。这就是为什么它正在处理您的“之后”过滤器,因为您正在将它添加到创建的对象中。
  • 但是为什么它在自定义后过滤器中不起作用?在那里,我将 cookie 附加到响应中。此外,它可以在文档中找到(four.laravel.com/docs/responses):return Response::make($content)->withCookie($cookie);,这里解释了队列方法:laravel.com/docs/requests#cookies

标签: php cookies laravel laravel-4


【解决方案1】:

试试这个经过测试的工作代码。
指定到期时间(从现在开始的分钟数)。不要在浏览器中使用一些 cookie 扩展,这可能会保护/黑名单指定的 cookie 不被修改...

Route::get('cookieset', function(){
    $cookie = Cookie::make('foo', 'bar', 60);
    return Redirect::to('cookieget')->withCookie($cookie);
});

Route::get('cookieget', function(){
    dd(Cookie::get('foo'));
});

【讨论】:

  • 这确实有效。一开始我以同样的方式实现它(使用重定向)。但是,当使用 IE9 嵌入到带有 Fangate 的 Facebook 页面时,重定向会阻止应用程序正确加载(导致重定向循环)。
  • IE 需要更多的努力才能使其在 IE 中运行。尝试设置此标头App::after(function($request, $response) { $response->headers->set('P3P','CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); });
  • 问题不是 IE 特定的,我已经设置了 P3P 标头 - 虽然我的看起来像这样 $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2016-12-04
  • 2019-11-19
  • 2018-04-10
  • 2018-08-10
相关资源
最近更新 更多