这个问题是这个问题的后续。
我的视图中有一条消息说: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"}
为什么饼干不是设置?
根据Lumen文档,似乎需要为响应(例如示例中的响应)将cookie排队。文档是这样说的:
为下一个响应排队
如果您想在创建响应之前设置cookie,使用Cookie::queue()方法。cookie将被自动删除附加到您的应用程序的最终响应。
Cookie::queue($name, $value, $minutes);
我的建议是尝试用排队cookie代替withCookie。但是,您可能需要稍微重写函数以适应,因为它看起来好像您正在尝试从一个请求发送响应。
希望这对你有用!
基于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'));
}