【问题标题】:Save user object in Session Storage在会话存储中保存用户对象
【发布时间】:2017-05-24 16:04:08
【问题描述】:

我正在使用 Angular 2 和 Typescript,并希望像保存全局变量一样保存用户对象,这样就不必多次检索它。我找到了会话存储,现在将用户对象保存在那里。

您认为将其存储在那里是一种好习惯还是数据过于敏感?如果是这样,我还可以使用什么其他类型的缓存?

这是我现在使用的代码:

user.service.ts:

getProfile() {
    let cached: any;
    if (cached = sessionStorage.getItem(this._baseUrl)) {
        return Observable.of(JSON.parse(cached));
    } else {
        return this.http.get(this._baseUrl).map((response: Response) => {
            sessionStorage.setItem(this._baseUrl, response.text());
            return response.json();
        });
    }
}

在 ngOnInit() 时在 app.component 中调用 getProfile()。应用程序的其他组件也需要用户对象。

【问题讨论】:

  • 为什么不用服务?
  • 我确实使用了一项服务。我可以添加我的代码。
  • 您可以使用本地存储,因为会话存储仅在当前选项卡上可用,但在关闭后仍然存在(您必须明确删除它)。有关两者之间差异的更多详细信息stackoverflow.com/questions/5523140/…

标签: angular typescript storage session-storage


【解决方案1】:

您可以使用sessionStorageservice

你的interface

export interface ISession {
    session:Object
}

你的实际service 类:

    import {Injectable} from '@angular/core';

    @Injectable()
    export class SessionService implements ISession {    
        private _session: session

        constructor(){

        }

        set session(value){
            this._session = value;
        }

        get session(){
            return this._session
        }
   }

现在您可以将这个SessionService 类注入到其他类constructors 中并使用它。

【讨论】:

  • 我要试试看!
  • 这将显示未定义,直到我不使用 localStorage 或 sessionStorage,对吗?
  • 从技术上讲,这是一项服务,如果您不设置任何内容,它将是未定义的......除非设置了默认值。
  • 但是浏览器选项卡上的硬刷新会对这些数据有什么影响???你也可以解释一下 localStorage 的使用
  • 如果用户输入另一个路由的url,(不是通过点击routerLink),我认为这个服务会重新启动,意味着之前设置的值会丢失。
【解决方案2】:

在会话存储中拥有安全/敏感数据是可以的。

由于会话存储仅适用于当前表和域...

如果用户在另一个窗口选项卡中检查相同的会话存储数据,那么它将不存在....所以它的安全存储....

如果想了解更多,请关注sessionStorage

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 2017-08-25
    • 1970-01-01
    • 2017-12-06
    • 2012-01-26
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多