14

使用 $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 (sessionStorage 和 localStorage 的范围)。

4

1 回答 1

33

$cookieStore 使用会话 cookie 意味着数据作为会话范围内的 cookie 持久化,即非持久化。cookie 的范围仅限于它注册的特定域,但可以在子域之间共享。关于 cookie 存储的大问题是这些 cookie 值将被发送到服务器以处理对该域的任何请求。它将在同一域的同一会话中的窗口和选项卡之间共享。

$window.sessionStorage 只是访问 window.sessionStorage,这与 Angular 没有任何关系。通过 $window 访问它只是让您能够使用 $window 的模拟版本更轻松地进行测试。会话存储的范围是当前窗口,因此与 cookie 不同,如果您打开一个指向完全相同 URL 的新选项卡,它将是一个新的 sessionStorage 对象。还有比饼干更多的存储空间。cookie 限制为 4K,sessionStorage 可能因浏览器而异,但通常约为 5MB。

还有 window.localStorage(或 $window.localStorage),它与 sessionStorage 基本相同,只是它是由域限定的(两个选项卡可以共享相同的数据 - 甚至还有一个存储事件,因此您可以找出另一个选项卡何时更改它) 并在您关闭浏览器时持续存在。

于 2014-06-06T13:25:13.047 回答