2016-05-31 8 views
5

Chociaż nie jest do końca pewien, czy jest to reagują konkretne pytanie:Prowadzenie sesji przy życiu po odświeżenie strony po stronie serwera z wykorzystaniem renderingu react.js

Rozwijamy i aplikacji za pomocą reakcji/redux stos z po stronie serwera renderingu. Po zalogowaniu użytkownika otrzymujemy dwa pliki cookie: jeden dla tożsamości i jeden dla sesji w przeglądarce (z datą wygaśnięcia). Problem polega na tym, że użytkownik odświeża stronę, którą przywraca stan, i tracimy informacje o sesji (w zasadzie ustawiamy pewne zmienne w stanie, aby wskazać, że użytkownik jest zalogowany).

Pytanie, jak zarządzać tą sytuacją i aby użytkownik był zalogowany nawet po odświeżeniu strony. Zastanawiam się nad całkowitym wyłączeniem renderowania po stronie serwera i po prostu sprawdzam po stronie klienta, czy ciasteczko z identyfikatorami sesji nie wygasło, kiedy strona jest początkowo renderowana i ustawia niektóre zmienne w stanie, jeśli sesja jest wciąż aktywna, i wady - w przeciwnym wypadku.

Czy to wygląda na bezpieczne podejście? Czy istnieje lepszy sposób na zrobienie tego?

Odpowiedz

1

Miałem podobny problem. Nie widzę nic niewłaściwego w sprawdzaniu plików cookie i ponownej rejestracji w interfejsie użytkownika sesji, jeśli możesz. Serwer jest nadal chroniony przez odpowiednie pliki cookie.

W moim przypadku jednak nie udało mi się sprawdzić plików cookie za pomocą JS, ponieważ zostały one ustawione jako http-only. W końcu musiałem pójść na następujące rozwiązanie:


, kiedy użytkownik loguje się z powodzeniem tworzyć przykład „sessionStorage”, aby wskazać, że istnieje aktywna sesja:

window.sessionStorage.setItem(sessionKey, stringifiedUserToken); 

Jeśli strona zostanie odświeżona następnie sprawdzić tę pozycję sesji i ponownie zarejestrować aktywnej sesji:

const activeSession = window.sessionStorage.getItem(sessionKey); 
if (activeSession) { 
    // fire register user session action 
} 

Jeśli użytkownik loguje się następnie zabić token przechowywania sesji.


Cała interakcja z serwerem nadal wymaga pliku cookie, który zostanie przesłany razem, więc jest to czysto problem z przodu.

Magazyn sesji zostanie wyczyszczony po zakończeniu sesji przeglądarki, więc to naiwne podejście może nie działać w przypadku "stałych" sesji. Ma doskonałą obsługę przeglądarki: http://caniuse.com/#search=sessionStorage

+0

, które faktycznie mogą działać, ale ustawienie sesji w oknie przeszkadza mi trochę. Czy znasz lokalną bibliotekę pamięci masowej. https://github.com/bevacqua/local-storage – ralzaul

+0

Sesja sesji to "natywna" funkcja przeglądarek. Po prostu można uzyskać do niego dostęp za pośrednictwem załącznika 'window'. :) Tak, lokalne przechowywanie i przechowywanie sesji według mojej wiedzy zasadniczo działają w ten sam sposób, z tym wyjątkiem, że pamięć sesji jest przepłukiwana między sesjami przeglądarki. Musiałem przejść do przechowywania sesji, ponieważ nie było sposobu, aby wiedzieć, czy sesja użytkownika przechowywana w sesji lokalnej jest nadal aktywna, jeśli użytkownik zamknął i ponownie otworzył przeglądarkę. Wynika to z tego, że nie mogłem uzyskać dostępu do plików cookie w celu weryfikacji. Z moim magazynem sesji miałem hasła do logowania/wylogowania, więc czułem się bezpieczny. – ctrlplusb

+0

p.s. masz dostęp do localstorage przez 'window.locationStorage' też ... :) – ctrlplusb

Powiązane problemy