Javascript 会话超时使调用函数的时间保持在6秒
我是Angular的新手,我使用bn ng idle作为会话超时,它工作正常。但是,当我将代码放入ngOnInit或构造函数中时,代码不断重复,尽管我甚至不在同一页中,因此,当我进入employees页面,然后被路由到signin页面时,构造函数中的代码出于某种原因不断重复,感谢您的帮助 employee.component.tsJavascript 会话超时使调用函数的时间保持在6秒,javascript,angular,typescript,session-timeout,Javascript,Angular,Typescript,Session Timeout,我是Angular的新手,我使用bn ng idle作为会话超时,它工作正常。但是,当我将代码放入ngOnInit或构造函数中时,代码不断重复,尽管我甚至不在同一页中,因此,当我进入employees页面,然后被路由到signin页面时,构造函数中的代码出于某种原因不断重复,感谢您的帮助 employee.component.ts constructor(private bnIdle: BnNgIdleService, private router: Router){ this.bnIdle.s
constructor(private bnIdle: BnNgIdleService, private router: Router){
this.bnIdle.startWatching(5).subscribe((isTimedOut: boolean) => {
if (isTimedOut) {
this.router.navigate(['/signin']);
console.log('session expired');
}
return;
});
}
检查STARTWATCH功能。 当它完成时会发生什么?5是指分钟数? 它是否将自身重置为初始值? 因为如果它这样做了,它将继续运行 你在哪一页无关紧要。这是可见光的特征之一。 当你注册一个,它会继续听。这就是为什么你必须取消他们的订阅,否则你会有内存泄漏 我不太清楚你想要实现什么 是否监视用户登录后的过去时间? 最好使用代币,并设置时间 如果仍要使用使用的方法,可以添加一个条件,检查用户是否在员工端: 例如:
isInEmployee: boolean;
constructor(private bnIdle: BnNgIdleService, private router: Router){
}
ngOnInit() {
this.isInEmployee = true;
this.bnIdle.startWatching(5).subscribe((isTimedOut: boolean) => {
if (isTimedOut && isInEmployee) ) {
this.router.navigate(['/signin']);
console.log('session expired');
}
return;
});
}
ngOnDestroy() {
this.isInEmployee = false; -> with your method
//but its better to unsubscribe from 'startWatching'
}
但我建议将JWT用于sessionStroage的任何会话活动,您需要将订阅存储在subscription变量中,并在销毁组件时使用 订阅需要取消订阅
private sessionSubscription: Subscription;
ngOnInit(): void{
this.sessionSubscription = this.bnIdle.startWatching(5).subscribe((isTimedOut: boolean) => {
if (isTimedOut) {
this.router.navigate(['/signin']);
console.log('session expired');
}
return;
});
}
ngOnDestroy(): void {
if (this.sessionSubscription){
this.sessionSubscription.unsubscribe();
}
}
检查STARTWATCH功能。当它完成时会发生什么?5是指分钟数?它是否将自身重置为初始值?因为如果它这样做了,它将继续运行。流程是:你在哪一页并不重要。这就是观察点。哦,我明白了,实际上当它结束时,它会再次开始计数,所以我找到了一个停止计数器的方法,即stopTimer,现在该方法被调用两次,但仍然不会发生。检查我下面的答案,而不是注释,我为您取消了答案。如果你觉得它对你有用,请在回答时打上标记,如果它不起作用,请回答什么不起作用,我会尽力帮助你。我正在使用JWT,是的,你已经说明了如何实现这一点,它工作得很好,非常感谢。