Javascript 会话超时使调用函数的时间保持在6秒

Javascript 会话超时使调用函数的时间保持在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

我是Angular的新手,我使用bn ng idle作为会话超时,它工作正常。但是,当我将代码放入ngOnInit或构造函数中时,代码不断重复,尽管我甚至不在同一页中,因此,当我进入employees页面,然后被路由到signin页面时,构造函数中的代码出于某种原因不断重复,感谢您的帮助

employee.component.ts

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,是的,你已经说明了如何实现这一点,它工作得很好,非常感谢。