仅在 Angular SPA 中的页面加载之间缓存会话数据

Posted

技术标签:

【中文标题】仅在 Angular SPA 中的页面加载之间缓存会话数据【英文标题】:Caching session data only between page loads in Angular SPA 【发布时间】:2016-01-19 03:56:56 【问题描述】:

我正在开发一个 Angular SPA,我现在正在尝试为会话数据实现某种级别的客户端缓存。这是跨路由/控制器使用的数据,因此我不想不必要地反复访问服务器/数据库来检索它。

我最初使用 sessionStorage 实现了缓存,但注意到当我注销然后重新登录时,之前的会话数据仍然存在。在考虑如何适当地清除缓存的会话数据时,似乎最安全的处理方法是仅在我的 SPA 中保留会话数据在页面加载/刷新之间。即使我在注销时清除缓存,用户也可能直接导航到登录页面并登录,从而破坏注销过程,从而导致存在不同的会话数据。

假设这是一种合理的方法,有没有办法配置 sessionStorage 或其他缓存机制以仅在页面加载/刷新之间保留缓存?如果没有内置配置,我可以将唯一标识符 (guid) 存储为隐藏字段并在我的 sessionStorage 键中使用它。

提前致谢。

【问题讨论】:

【参考方案1】:

简单的方法是使用 $rootScope,但总是会在页面刷新时重置,因为它是一个单页应用程序。

您需要使用在客户端持久存在的东西,例如 cookie 或 sessionStorage(因为它们都有过期时间)。对于 cookie,请参见 $cookieStore: https://docs.angularjs.org/api/ngCookies/service/$cookieStore

【讨论】:

以上是关于仅在 Angular SPA 中的页面加载之间缓存会话数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Angular Oninit 仅在离开页面时才调用服务

基于Vue的SPA如何优化页面加载速度

浅谈前端SPA(单页面应用)

SPA

如何仅在 Angular 的某些页面上显示标题组件(现在它仅在重新加载时显示)

SPA单页面优缺点