Perché i cookie non sono impostati in Laravel Lumen

Questa domanda è la seguente di questa domanda .

A mio avviso ho un messaggio che dice: This site uses cookie [...] Close .

Quando l'utente fa clic su Close , viene inviata una richiesta Ajax al controller. La function è la seguente:

 public function acceptCookie(Request $request) { if ($request->valid == 'accept') { $response = new Response('acceptCookie'); if ($response->withCookie(cookie('acceptCookie', 'accepte', 44000))) { return Response()->json(arrays('statut' => 'Succes')); } else { return Response()->json(arrays('statut' => 'Erreur')); } } else { return Response()->json(arrays('statut' => 'Erreur')); } } 

Non ho alcun errore e JSON restituisce sempre {"statut":"Succes"}

Perché il cookie non è impostato?

In base alla documentazione Lumen, sembra che sia necessario accodare il cookie per una risposta come quella dell'esempio. Ecco cosa dicono i documenti:

Accodamento di un cookie per la prossima risposta

Se si desidera impostare un cookie prima che sia stata creata una risposta, utilizzare il metodo Cookie :: queue (). Il cookie verrà automaticamente allegato alla risposta finale dalla tua applicazione.

Cookie :: queue ($ nome, $ valore, $ minuti);

Il mio suggerimento sarebbe provare a sostituire il withCookie con l'accodamento del cookie. Tuttavia, potrebbe essere necessario riscrivere la function un po 'per adattarsi perché sembra che tu stia cercando di submit a una risposta da una richiesta.

Spero che questo funzioni per te!

Basato sulla linea Illuminate\Http\ResponseTrait 28 , il metodo Illuminate\Http\Response::withCookie restituisce $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; } 

Significa che hai un errore logico nel codice.

 // 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(arrays('statut' => 'Succes')); } else { return Response()->json(arrays('statut' => 'Erreur')); }