在会话存储中保存用户对象

Posted

技术标签:

【中文标题】在会话存储中保存用户对象【英文标题】: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()。应用程序的其他组件也需要用户对象。

【问题讨论】:

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

【讨论】:

以上是关于在会话存储中保存用户对象的主要内容,如果未能解决你的问题,请参考以下文章

Shiro 在 2 分钟后重置会话

护照js如何在会话中存储用户对象?

如何在会话中存储零用户的目标?

在会话中存储用户数据 - 从数据库

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器

会话中的弹簧存储对象