Почему cookie не установлен в Laravel Lumen

Этот вопрос является следующим вопросом .

У меня есть сообщение на мой взгляд, который говорит: « 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 не установлен?

Основываясь на документации Lumen, кажется, что вам нужно поставить в очередь куки-файл для ответа, такого как тот, который приведен в вашем примере. Вот что говорят документы:

Queuing Cookie для следующего ответа

Если вы хотите установить cookie перед созданием ответа, используйте метод Cookie :: queue (). Файл cookie будет автоматически прикреплен к окончательному ответу вашего приложения.

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

Мое предложение состояло бы в том, чтобы попытаться заменить theCookie на очередь на файл cookie. Но вам может потребоваться переписать функцию немного, чтобы разместить, потому что кажется, что вы пытаетесь отправить ответы от одного запроса.

Надеюсь, что это работает для вас!

На основе строки 28 Illuminate\Http\Response::withCookie метод 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')); }