2014-06-05 20 views
12

使用$ cookieStore和& window.sessionStorage有什麼區別?有時候應該使用另一種嗎?安全問題?

以下是我目前所知:

的AngularJS文檔說明的是,$的CookieStore服務由「會話cookie」(https://docs.angularjs.org/api/ngCookies/service/ $的CookieStore)的支持。因此,看起來存儲在$ cookieStore中的信息與其使用的窗口/標籤綁定在一起。這通過在$ cookieStore的代碼中使用神祕的$ browser服務來確認:https://github.com/angular/angular.js/blob/master/src/ngCookies/cookies.js#L125

但是,由於$ browser是一個內部服務,可能會發生變化,我無法看到它是如何存儲數據的,看它是否與sessionStorage類似。

相同的瀏覽器/選項卡/窗口範圍似乎適用於$ window.sessionStorage(Scope of sessionStorage and localStorage)。

回答

30

$ cookieStore使用會話cookie意味着數據被保存爲作用域爲會話的cookie,即不持久。一個cookie的作用範圍是它所註冊的特定域,但可以在子域之間共享。關於cookie存儲的一個重要問題是,這些cookie值將被髮送到服務器以處理對該域的任何請求。它將在同一個域的同一會話中的窗口和選項卡之間共享。

$ window.sessionStorage只是訪問window.sessionStorage,這與Angular無關。通過$ window訪問它只是讓您能夠使用模擬版本的$ window更容易地進行測試。會話存儲被限制在當前窗口中,因此與cookie不同,如果您向完全相同的URL打開新選項卡,它將成爲新的sessionStorage對象。還有比Cookie更多的存儲空間。 Cookie僅限於4K,sessionStorage可能因瀏覽器而異,但通常爲5MB左右。

還有一個window.localStorage(或$ window.localStorage),它基本上與sessionStorage相同,只是它的作用域是域(兩個標籤可以共享相同的數據 - 甚至有一個存儲事件,所以你可以找出什麼時候另一個選項卡更改它)並在關閉瀏覽器時保留。

+1

謝謝,現在澄清。我正在尋找如何在每個請求中存儲/發送一個簡單的令牌,看起來像CookieStore會照顧到這一點,而不必每次都從sessionStorage進行手動提取。 – oberger

+0

可以請你看看這個問題@大衛博克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

我想要存儲值(令牌),以便即使我在同一個(優選)或不同瀏覽器的不同選項卡中打開,它也會被持久保留 – forgottofly

相關問題