2016-03-22 17 views
7

Sto impostando il cookie su qualche evento click. Poi, dopo la memorizzazione valore di cookie, voglioCome lavorare con i cookie in Laravel 5.2

  1. Verificare l'esistenza di biscotto
  2. ottenere i valori dei cookie

ho sviluppato una funzione facendo riferimento laravel documentazione ufficiale. La console mostra che i cookie sono stati impostati. Ma dopo, non posso risolvere due punti (menzionati nell'elenco qui sopra) per la vista (modello di lama). Mostra sempre (Cookie::get('cookie.clients')) "null". Ma la console del browser visualizza quel cookie . Se qualcuno conosce la risposta, sarà apprezzato.

Ecco il mio codice.

controller

use App\Client; 
use App\Http\Requests; 
use Illuminate\Http\Request; 
use Validator; 
use App\Http\Controllers\Controller; 
use App\Repositories\ClientRepository; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Cookie; 

class ClientController extends Controller 
{ 
    public function cookieadd(Request $request, Client $client) 
    { 
     $clients = []; 
     if (Cookie::get('cookie.clients') != null) 
     { 
      $clients = Cookie::get('cookie.clients'); 
     } 
     array_push($clients, $client); 

     Cookie::forever('cookie.clients', $clients); 

     return redirect('/client'); 
    } 
} 

View

@if (Cookie::get('cookie.clients') != null) 
<p>cookie is set</p> 
@else 
<p>cookie isn't set</p> 
@endif 
+0

Stai impostando il cookie tramite javascript in "qualche evento click" o chiamando il metodo 'cookieadd' nel tuo' Clientcontroller'? – Padarom

+0

@Padarom, chiamando il metodo 'cookieadd()' –

risposta

4

si sta creando un oggetto biscotto ma non sei inviarlo con la risposta.

Potete, aggiungerlo direttamente alla vostra risposta in un controllore

$cookie = Cookie::forever('cookie.clients', $clients); 

return redirect('/client')->withCookie($cookie); 

Oppure è possibile mettere in coda un cookie e utilizzare il AddQueuedCookiesToResponse Middleware per aggiungere automaticamente alla risposta.

Cookie::queue(Cookie::forever('cookie.clients', $clients)); 

return redirect('/client'); 
1

Ecco un'altra prospettiva.

Se ho capito correttamente, hai utilizzato Javascript per impostare il cookie sul lato client e vuoi raccoglierlo sul lato server.

Laravel crittografa i suoi cookie e quando si utilizza $request->cookies() si ottengono i valori decrittografati e il recupero dei cookie dal lato client non passa il processo di decrittografia e otteniamo null s. Immagino, non sono stato in grado di estrarre il codice sorgente appropriato :)

È ancora possibile utilizzare il PHP originale $_COOKIE['cookie_clients'] per recuperare il set di cookie dal client. Avviso, . viene convertito in _ da PHP (as seen on php.net).

In alternativa, si potrebbe aggiungere il nome del cookie di interesse in $except in Http/Middleware/EncryptCookies.php, che vi permetterà di scegliere in su con l'approccio più laravel di $request->cookie().

Sono sicuro che ci sono molti altri modi per aggirare Laravel qui, spero che questo ti dia un'idea di dove guardare se non ti piace l'approccio. In bocca al lupo.