我遇到了无法使用Laravel 5.2设置cookie的问题,我在阅读this post后问题已经解决了。 (所以我需要的不是解决方案,而是解释。)
简而言之,
return view('welcome')->withCookie(cookie('test', 'test', 45000));
这不起作用,并使其有效:
public function index(CookieJar $cookieJar, Request $request)
{
if($request->referrer){
$cookieJar->queue(cookie('referrer', $request->referrer, 45000));
}
return view('welcome');
}
或者:
$response = new \Illuminate\Http\Response(view('welcome'));
$response->withCookie(cookie('referrer', $request->referrer, 45000));
return $response;
让我烦恼的是,第一个代码在没有设置任何cookie的情况下不会返回任何错误,这意味着它实际上做了一些有效的事情(但没有设置cookie)。它实际上做了什么?为什么后两种解决方案有效?
答案 0 :(得分:1)
在第一个选项中,您实际上并不包含Cookie,而是一个名为' cookie'的参数。碰巧有函数cookie
计算的值。我的意思是,您正在使用withXXXX
的函数View
,它会创建一个名为XXXX的参数。事实上,如果你包括像
在您的刀片视图文件中{{$饼干}}
,您将获得使用cookie
函数生成的值。
那就是它实际上在做什么:将名为cookie的参数传递给视图构建器。
第二种方法有效,因为您正在使用cookieJar并且会自动保留。
第三种方法有效,因为您使用的是View
但Response
的withCookie函数 NOT ,它实际上会创建并返回一个Cookie。
TL; DR:您必须将cookie添加到响应中,而不是视图中。