带有计时器的用户会话超时

时间:2019-04-22 12:21:52

标签: javascript angular session rxjs

目前正在设置我正在使用的应用程序,即当用户首次与表单进行交互时,会创建一个会话,其过期时间为15分钟,

此外,会话是在服务器端设置的。

15分钟后,并且如果用户空闲(未与表单交互),服务器将返回404并注销用户。

现在需要的是一个警告,提醒用户距离超时20秒。

我的想法是轮询端点,以获取有关会话到期时间的信息,并在20秒后提醒用户。

我的问题是2倍,应该多久调用一次端点?

我认为至少每20秒

而且,当我第一次尝试这种方法时,我担心会出现性能问题,如果有很多用户在轮询,这会不会造成延迟,等等?

只需要有经验的人的意见

2 个答案:

答案 0 :(得分:1)

轮询并不是什么新鲜事物,并且经常被使用。一切都取决于您的服务器及其负载。我建议,因为您完全可以知道会话将持续多长时间,因此可以使服务器返回诸如expiresAt之类的值,该值将告诉您会话何时超时,基于此,您可以在前端显示警告而无需甚至不必为此轮询后端。

答案 1 :(得分:1)

您需要AJAX轮询才能发送请求。每1分钟= 60000ms,它将检查鼠标是否仍在移动(供应商在那里)。

function polling(){
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
     console.log('done');
  }
  };
  xhttp.open("POST", "server.php", true);
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.send();
 }    



var timeout;
document.onmousemove = function(){
 clearTimeout(timeout);
 timeout = setTimeout(function(){
   polling();
 }, 60000);
}

和服务器端都在您的server.php中

<?php
 session_start();
 session_destroy();
  header("Location: home.php");
?>

它将破坏所有会话,客户端将注销所有点击。