此问题如下this question。
我的观点中有一条消息说:This site uses cookie [...] Close
。
当用户点击Close
时,会向控制器发送ajax请求。功能如下:
public function acceptCookie(Request $request)
{
if ($request->valid == 'accept') {
$response = new Response('acceptCookie');
if ($response->withCookie(cookie('acceptCookie', 'accepte', 44000))) {
return Response()->json(array('statut' => 'Succes'));
} else {
return Response()->json(array('statut' => 'Erreur'));
}
} else {
return Response()->json(array('statut' => 'Erreur'));
}
}
我没有任何错误,JSON总是返回{"statut":"Succes"}
为什么不设置Cookie?
答案 0 :(得分:2)
根据Lumen文档,您似乎需要将cookie排入队列以获取响应,例如示例中的响应。这是文档所说的内容:
为下一个响应排队Cookie
如果您想在创建回复之前设置Cookie, 使用Cookie :: queue()方法。 cookie将自动成为 附在您申请的最终答复中。
Cookie :: queue($ name,$ value,$ minutes);
我的建议是尝试使用排队cookie代替withCookie。但是,您可能需要稍微重写一下这个函数才能适应,因为它看起来好像是您尝试从一个请求发送回复。
希望这适合你!
答案 1 :(得分:0)
基于Illuminate\Http\ResponseTrait
行28
,Illuminate\Http\Response::withCookie
方法返回$this
。
/**
* Add a cookie to the response.
*
* @param \Symfony\Component\HttpFoundation\Cookie $cookie
* @return $this
*/
public function withCookie(Cookie $cookie)
{
$this->headers->setCookie($cookie);
return $this;
}
表示您的代码中存在逻辑故障。
// This always return Illuminate\Http\Response instance,
// thus it will never reach ELSE statement forever.
if ($response->withCookie(cookie('acceptCookie', 'accepte', 44000))) {
return Response()->json(array('statut' => 'Succes'));
} else {
return Response()->json(array('statut' => 'Erreur'));
}