2015-10-14 9 views
9

Mam stronę Laravel 5.0, w której frontend JS wykonuje wiele wywołań ajaxowych do kodu Laravel backendu. Zauważyłem, że na każde żądanie ajax otrzymuję nową wartość "cookie laravel_session" w odpowiedzi za każdym razem. Zgaduję, że jest to jakiś mechanizm bezpieczeństwa, który chroni przed przechwytywaniem sesji.Identyfikator sesji Laravel zmienia się z każdym żądaniem

Jednak myślę, że to powoduje problem z moją witryną, ponieważ moje wywołania ajaxowe zdarzają się często równolegle, a nie sekwencyjnie. Nie czekam na odpowiedź przed odpaleniem następnego połączenia.

Rozważ ten scenariusz:

. Połączenie Ajax 1 - żądanie - ciasteczko laravel_session = '1234'

. Wywołanie Ajax 1 - odpowiedź - ciasteczko laravel_session = '2345'

. Połączenie Ajax 2 - request-laravel_session cookie = '2345'

. Połączenie Ajax 3 - request-laravel_session cookie = '2345'

. Połączenie Ajax 2 - odpowiedź - ciasteczko laravel_session = '3456'

. Połączenie Ajax 3 - odpowiedź - sesja już nieaktualna

Czy jest jakiś sposób obejścia tego?

I należy również pamiętać, że sesje są wygasnąć w config/session.php jak 'życia' => 120,

enter image description here

config/session.php

+2

To nie jest mechanizm bezpieczeństwa, i masz rację - to nie powinno się dziać. Sprawdź ustawienia sesji w 'config/session.php' i sprawdź, czy ścieżka cookie jest poprawna. Domyślnie sesje oparte na plikach powinny być przechowywane w 'storage/framework/sessions /' - jeśli ten folder jest pusty, być może twoja instalacja nie może poprawnie napisać do tego folderu. – samlev

+0

moje ustawienia w config/session.php wyglądają ok do mnie "files" => storage_path(). '/ Framework/sessions', i widzę pliki tworzone w storage/framework/sessions/ – MakkyNZ

+0

dla mnie to jest ' files '=> storage_path (' framework/sessions ') – mroesler

Odpowiedz

2

Twoja domena jest nieprawidłowy. Musisz spojrzeć na config.session.domain i config.session.path.

+0

Zmieniono ustawienie "domain" w config/session.php na domenę mojej witryny, ale nadal widzę problem. "ścieżka" jest ustawiona na "/", co wydaje mi się być w porządku – MakkyNZ

+0

Czy jesteś całkowicie pewien, że domena jest poprawna? Czy możesz opublikować kolejny zrzut ekranu? Przez wiele godzin miałem te same problemy, dopóki nie zorientowałem się, że przypadkowo popełniłem mały błąd. –

+0

Dodałem zrzut ekranu. http://local.mysite.com to adres URL witryny działającej lokalnie. Mam wpis hosta dla tego. – MakkyNZ

6

Masz rację, to mechanizm bezpieczeństwa. Aby wyłączyć go do testów, w Kernel.php skomentować tę linię:

\App\Http\Middleware\EncryptCookies::class 

Następnie pojawi się identyfikator sesji w Twojej przeglądarce ciasteczka i to się nie zmienia.

Możesz używać Google do szyfrowania plików cookie HTTP, aby dowiedzieć się więcej o praktyce. Trwa debata, jeśli ta stara praktyka jest konieczna teraz, gdy używamy HTTPS na każdej stronie internetowej.

+0

dlaczego tak mówisz? To nie jest prawda i sugerujesz, aby ktoś wyłączył mechanizm bezpieczeństwa. – hilnius

+0

Utrzymuję to. Pytanie sprowadza się do "dlaczego tak się dzieje? i wierzę, że to odpowiada. Możesz skomentować linię, aby to zweryfikować, ale nie czytam tego jako zalecenia do usunięcia szyfrowania. – mikeDOTexe

+0

Dzięki i ja zredagowaliśmy odpowiedź, aby wyjaśnić wyłączenie dla celów testowych. – malhal

Powiązane problemy