0

这个问题是这个问题的下面

在我看来,我有一条消息说: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?

4

2 回答 2

2

根据 Lumen 文档,您似乎需要将 cookie 排队等待响应,例如您的示例中的响应。这是文档所说的:

为下一个响应排队 Cookie

如果您想在创建响应之前设置 cookie,请使用 Cookie::queue() 方法。cookie 将自动附加到您的应用程序的最终响应中。

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

我的建议是尝试将 withCookie 替换为对 cookie 进行排队。但是,您可能需要稍微重写该函数以适应,因为它看起来好像您正在尝试发送来自一个请求的响应。

希望这对你有用!

于 2015-06-02T21:48:27.787 回答
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'));
}
于 2015-06-04T09:12:49.703 回答