Node.js 如何在浏览器关闭的情况下检查会话是否仍然存在
以下是我的场景:在登录到应用程序后,在下一个浏览器窗口打开时-用户已经通过身份验证(使用express session),它直接进入内容页(不通过登录页)。这种行为将在下一个浏览器窗口打开时继续。 现在-问题-我需要确定最后一个浏览器窗口何时关闭-以便清除会话。Node.js 如何在浏览器关闭的情况下检查会话是否仍然存在,node.js,angular,express-session,session-storage,Node.js,Angular,Express Session,Session Storage,以下是我的场景:在登录到应用程序后,在下一个浏览器窗口打开时-用户已经通过身份验证(使用express session),它直接进入内容页(不通过登录页)。这种行为将在下一个浏览器窗口打开时继续。 现在-问题-我需要确定最后一个浏览器窗口何时关闭-以便清除会话。 我正在寻找某种方法来检查用户是否关闭了最后一个(经过身份验证的)浏览器窗口。 我假设这可以通过会话存储来实现,但不知道如何进行调查 您应该使用在客户端维护身份验证的标准方法 快乐编码…:) 在路由中添加canActivate: cons
我正在寻找某种方法来检查用户是否关闭了最后一个(经过身份验证的)浏览器窗口。 我假设这可以通过会话存储来实现,但不知道如何进行调查 您应该使用在客户端维护身份验证的标准方法
快乐编码…:) 在路由中添加
canActivate
:
const routes: Routes = [
{ path: 'login', component: LoginComponent },
{
path: 'dashboard',
loadChildren: './master/master.module#MasterModule',
canActivate: [AppRouteGuard]
},
{ path: '**', component: NotFoundComponent }
];
并创建一个认可的监护服务,如下所示:
export class AppRouteGuard implements CanActivate {
constructor(private router: Router) { }
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (localStorage.getItem('loginData') != null ) {
return true;
} else {
this.router.navigate(['/login'])
return false;
}
}
}
导出类AppRouteGuard实现可激活{
构造函数(专用路由器:路由器){}
canActivate(路由:ActivatedRouteSnapshot):可观察的|承诺|布尔值{
if(localStorage.getItem('loginData')!=null){
返回true;
}否则{
this.router.navigate(['/login'])
返回false;
}
}
}
试试下面的方法。我不是100%确定它能满足所有情况,可能有一些边缘情况需要单独处理
我已经使用计数器实现了以上所有功能。主要和唯一的问题是第4节:无法识别标签是关闭事件窗口:刷新页面时卸载是触发事件。好的……考虑页面刷新,因为新标签可能是…关闭旧的选项卡ID并创建新的选项卡ID并将其发送到浏览器?您尝试过解决方案吗?是的,问题是当浏览器关闭并打开新的选项卡ID时,本地存储会保留值事件