2015-06-18 14 views
6

Il mio sito Web Laravel5 utilizza token csrf per impedire attacchi CSRF. Su Chrome e Firefox, eveything funziona bene.Laravel 5 e Internet Explorer: token non corrispondente

Ho inviato il sito per testare il mio client e, quando utilizza Internet Explorer (9/10), ha errori "Token non corrispondenti" su evey Page utilizzando il token.

Presumo che si tratti di un problema di cookie/sessione.

Dopo alcune ricerche, ho provato a rimuovere la barra nel nome del cookie ("laravel_session") e a modificare il driver di sessione ("file" per impostazione predefinita). Non ha aiutato.

So che il mio cliente potrebbe cambiare le sue "politiche di fiducia" in IE ma è un sito pubblico e questa sarebbe solo una soluzione temporanea.

Qualche idea su questo strano problema?

+0

Lavoro presso un'organizzazione in cui alcuni utenti navigano con IE dall'8 all'11 e ho lo stesso problema dispari. Ho lanciato un'applicazione per le risorse umane usando Laravel 5 e non appena è stato avviato, ho controllato il registro e ho riscontrato errori di "corrispondenza mancata corrispondenza" ovunque! La risposta di @ user534498 è un buon inizio e qualcosa che non avevo considerato, ma spero che ci sia qualche spiegazione in più su questo problema perché non so nemmeno da dove iniziare a trovare la causa principale. – haakym

risposta

4

Non sono sicuro del tuo caso. Ma ho appena incontrato lo stesso problema oggi. Solo IE ha avuto problemi. FF e chrome funzionano bene.

Mi rendo quindi conto che è l'ora/la data sul server sbagliata. Imposta il server sulla data corrente, quindi tutto funziona ora.

Suppongo che sia perché il server imposterà la scadenza del cookie in base al proprio tempo e, al client, IE cancellerà immediatamente i cookie se il server rimane indietro. Solo la mia ipotesi.

Spero che possa risolvere anche il tuo caso. In bocca al lupo.

+0

La tua soluzione sembra funzionare per me. Tnx. – Chilion

2

ho avuto lo stesso problema e che fissa per me è stato quello di modificare il mio .htaccess scade impostazioni:

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault A0 
    ExpiresByType text/html A0 
    # Set up caching on media files for 1 year 
    <FilesMatch "\.(jpg|png|gif|js|css|ico|woff|woff2|eot|svg|ttf)$"> 
     ExpiresDefault A31536000 
    </FilesMatch> 
</IfModule> 

prima, il mio ExpiresDefault era A31536000 e non ho avuto il testo ExpiresByType/html.

+0

ottimo che funzionava :) – Effectiva

1

Ho affrontato lo stesso problema ed era dovuto all'errore P3P. Affrontato il problema su Edge (Windows 10).

Ho fatto molte ricerche e finalmente l'ho risolto.

Tutto quello che dovete fare è creare un nuovo middleware e udpate la funzione di maniglia per,

public function handle($request, Closure $next) 
{ 
    $response = $next($request); 
    $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
    return $response; 
} 

spiegato in dettaglio

https://robinz.in/csrf-token-session-error-with-laravel-on-ie-edge/

+0

La tua soluzione non sembra funzionare per me. –

+0

Né per me per qualche motivo –

2

Nel mio caso il problema era il server tempo. Ho letto da qualche parte che se l'ora del server è precedente al client, IE cancella i cookie. Poi ho notato che il tempo del server qui era di 8 ore in ritardo. Dopo aver risolto questo problema, l'errore di mancata corrispondenza dei token scompare.

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. – pableiros