为什么cookie不会在Laravel Lumen中设置

时间:2015-05-31 10:11:53

标签: php laravel cookies lumen

此问题如下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?

2 个答案:

答案 0 :(得分:2)

根据Lumen文档,您似乎需要将cookie排入队列以获取响应,例如示例中的响应。这是文档所说的内容:

  

为下一个响应排队Cookie

     

如果您想在创建回复之前设置Cookie,   使用Cookie :: queue()方法。 cookie将自动成为   附在您申请的最终答复中。

     

Cookie :: queue($ name,$ value,$ minutes);

我的建议是尝试使用排队cookie代替withCookie。但是,您可能需要稍微重写一下这个函数才能适应,因为它看起来好像是您尝试从一个请求发送回复。

希望这适合你!

答案 1 :(得分:0)

基于Illuminate\Http\ResponseTrait28Illuminate\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'));
}