2014-06-05 22 views
12

Jaka jest różnica między używaniem $ cookieStore a & window.sessionStorage? Czy są chwile, kiedy jeden powinien być używany nad drugim? Problemy z bezpieczeństwem?

Oto, co wiem do tej pory:

W angularjs docs stwierdzić, że usługa $ CookieStore jest wspierany przez "cookies sesyjne" (https://docs.angularjs.org/api/ngCookies/service/ $ CookieStore). Wygląda więc na to, że informacje przechowywane za pomocą $ cookieStore są powiązane z oknem/kartą, w której są używane. Potwierdza to użycie tajemniczej usługi $ browser w kodzie $ cookieStore: https://github.com/angular/angular.js/blob/master/src/ngCookies/cookies.js#L125.

Ponieważ przeglądarka $ jest wewnętrzną usługą i może ulec zmianie, nie widzę sposobu przechowywania danych, aby sprawdzić, czy jest ona podobna do sessionStorage.

Ten sam zakres przeglądarki/karty/okna wydaje się mieć zastosowanie do $ window.sessionStorage (Scope of sessionStorage and localStorage).

Odpowiedz

30

$ cookieStore przy użyciu plików cookie sesji oznacza, że ​​dane są przechowywane jako pliki cookie, które są ograniczone do sesji, tj. Nie są trwałe. Plik cookie jest ograniczony do konkretnej domeny, w której jest zarejestrowany, ale może być udostępniany między subdomenami. Wielką zaletą sklepu z plikami cookie jest to, że te wartości cookie będą wysyłane na serwer w związku z wszelkimi żądaniami do tej domeny. Byłby dzielony między okna i karty w tej samej sesji w tej samej domenie.

$ window.sessionStorage po prostu uzyskuje dostęp do window.sessionStorage, który tak naprawdę nie ma nic wspólnego z Angular. Uzyskanie dostępu do niego za pośrednictwem okna $ daje możliwość łatwiejszego testowania za pomocą wyśmiewanej wersji okna $. Pamięć sesji jest ograniczona do bieżącego okna, więc w przeciwieństwie do plików cookie, jeśli otworzysz nową kartę pod tym samym adresem URL, będzie to nowy obiekt sessionStorage. Jest też więcej miejsca na przechowywanie niż ciasteczka. Plik cookie jest ograniczony do 4K, sessionStorage może się różnić w zależności od przeglądarki, ale zwykle wynosi około 5 MB.

Istnieje również window.localStorage (lub $ window.localStorage), który jest w zasadzie taki sam jak sessionStorage, z tym że jest ograniczony zasięgiem domeny (dwie zakładki mogą udostępniać te same dane - jest nawet zdarzenie magazynowe, dzięki czemu można się dowiedzieć, kiedy inna karta to zmienia) i nie ustępuje po zamknięciu przeglądarki.

+1

Dzięki, wyjaśnione teraz. Szukałem sposobu przechowywania/wysyłania prostego tokena przy każdym żądaniu, wygląda na to, że cookieStore zajmie się tym bez konieczności ręcznego wyciągania z sessionStorage za każdym razem. – oberger

+0

Czy możesz spojrzeć na to pytanie @ David Boike http://stackoverflow.com/questions/29251702/token-not-getting-saved-in-window-sessionstorage-when-page-is-opened-in-differe/29251806 ? noredirect = 1 # comment46707411_29251806 – forgottofly

+0

Chcę przechowywać wartość (token), aby była zachowywana, nawet jeśli otworzę w innej zakładce tej samej (najlepiej) lub innej przeglądarce. – forgottofly