我正在使用Angular(版本6,使用ngx-rocket启动程序)开发应用程序。我担心在浏览器中的标签之间共享应用会话。我发现的所有答案都很老。我在这里问如何正确处理(没有安全性问题)。
此解决方案:https://stackoverflow.com/a/32766809/9172963可行,但我不太喜欢将javascript放入angular应用程序的index.html中的想法。其他解决方案,例如:Communication between tabs or windows不能选择,因为应用程序需要在Edge浏览器中工作。
答案 0 :(得分:0)
如果您不存储用户角色和权限,则可以使用javascript本地存储。您不必在index.html中插入javascript。
只需创建类似以下的服务
:import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LocalStorageService {
public localStorage;
constructor() {
this.localStorage = window.localStorage;
}
getObject(key){
let value = this.localStorage.getItem(key);
return JSON.parse(value);
}
setObject(key, value){
this.localStorage.setItem(key, JSON.stringify(value));
}
get(key){
return this.localStorage.getItem(key);
}
set(key, value){
this.localStorage.setItem(key,value);
}
clear(){
this.localStorage.clear();
//console.log("cleared");
}
}
然后,您可以使用此服务将数据保存在一个选项卡中,然后在另一个选项卡上获取。只是要确保不要保存您不希望用户能够更改的数据,例如用户角色和权限。如果必须使用不同的选项卡来访问用户,则可以使用一种方式在一个选项卡中使用的身份验证从服务器获取它。
希望有帮助