在会话存储中保存用户对象
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】:您可以使用sessionStorage
或service
。
你的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
【讨论】:
以上是关于在会话存储中保存用户对象的主要内容,如果未能解决你的问题,请参考以下文章
session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器