Php 为什么withCookie()不起作用?
我遇到了无法使用Laravel 5.2设置cookie的问题,在阅读之后,问题已经解决(所以我需要的不是解决方案而是解释。) 总之,Php 为什么withCookie()不起作用?,php,laravel,cookies,laravel-5,laravel-5.2,Php,Laravel,Cookies,Laravel 5,Laravel 5.2,我遇到了无法使用Laravel 5.2设置cookie的问题,在阅读之后,问题已经解决(所以我需要的不是解决方案而是解释。) 总之, return view('welcome')->withCookie(cookie('test', 'test', 45000)); 这是行不通的,为了让它发挥作用,也要: public function index(CookieJar $cookieJar, Request $request) { if($request->refer
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');
}
或:
让我恼火的是,第一个代码没有返回任何错误,而它没有设置任何cookie,因此这意味着它实际上做了一些有效的事情(但没有设置cookie)。它实际上是做什么的?为什么后两种解决方案有效?在第一个选项中,您实际上没有包含cookie,而是包含一个名为“cookie”的参数,该参数的值恰好由函数
cookie
计算。我的意思是,您正在使用视图
的函数和XXXX
,它创建了一个名为XXXX的参数。事实上,如果你包括
{{$cookie}}
在刀片视图文件中,您将获得使用cookie
函数生成的值
它实际上就是这样做的:将一个名为cookie的参数传递给视图生成器。
第二种方法很有效,因为您使用的是cookieJar,它会自动保存
第三种方法之所以有效,是因为您使用的withCookie函数不是视图的,而是响应的,它实际上创建并返回了一个cookie
TL;DR:您必须将cookie添加到响应中,而不是视图中
$response = new \Illuminate\Http\Response(view('welcome'));
$response->withCookie(cookie('referrer', $request->referrer, 45000));
return $response;