Javascript 停止恢复会话

Javascript 停止恢复会话,javascript,google-chrome,iis,Javascript,Google Chrome,Iis,有没有办法告诉chrome在重新打开关闭的页面时不要恢复会话?也许是一个特别的标题 当我的员工登录到我的公司应用程序时,它非常依赖于州。如果他们在60分钟内处于非活动状态,我想将他们注销并删除所有与他们正在做的事情相关的数据,但问题是Chome有一个方便的功能,它将在你离开的地方重新打开你的页面,而不会对任何事情提出疑问。我的网站不会知道他们关闭了浏览器两天,并且setTimeout在接下来的50分钟内不会启动 我还有另外两个古怪的解决办法,但我更希望我能告诉Chrome不要试图挽救旧会话,而是

有没有办法告诉chrome在重新打开关闭的页面时不要恢复会话?也许是一个特别的标题

当我的员工登录到我的公司应用程序时,它非常依赖于州。如果他们在60分钟内处于非活动状态,我想将他们注销并删除所有与他们正在做的事情相关的数据,但问题是Chome有一个方便的功能,它将在你离开的地方重新打开你的页面,而不会对任何事情提出疑问。我的网站不会知道他们关闭了浏览器两天,并且
setTimeout
在接下来的50分钟内不会启动

我还有另外两个古怪的解决办法,但我更希望我能告诉Chrome不要试图挽救旧会话,而是像第一次打开一样对待每个打开的会话。可能是通过javascript禁用缓存

编辑:
我正在使用IIS为Angular 9静态html和javascript提供服务。

您要做的是从服务器端销毁
会话。检查下面用
php
编写的代码。然而,如果你有了这个想法,你可以用任何东西来实现它

<?php

session_start();

//Expire the session if user is inactive for 60 minutes or more.
$expireAfter = 60;

//Assign the current timestamp as the user's latest activity
$_SESSION['last_action'] = time();

//Check to see if our "last action" session variable has been set.
if(isset($_SESSION['last_action'])){

    //Figure out how many seconds have passed since the user was last active.
    $secondsInactive = time() - $_SESSION['last_action'];

    //Convert our minutes into seconds.
    $expireAfterSeconds = $expireAfter * 60;

    //Check to see if they have been inactive for too long.
    if($secondsInactive >= $expireAfterSeconds){
        //User has been inactive for too long. Kill their session.
        session_destroy();
        unset($_SESSION);
        header("Location: http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/example/login.php");
        exit;
    }

}

所以,正如您所提到的,您使用的是一个没有后端的静态网站。虽然您没有提到任何内容,但我假设您正在使用
sessionStorage
localStorage
来处理身份验证。如果是这种情况,您可以在用户登录时设置计时器,并维护本地存储以跟踪空闲时间

let obj_date = new Date();
let miliseconds = obj_date.getTime(); // Returns the number of miliseconds since 1970/01/01
localStorage.setItem("idle_time",miliseconds); 
之后,每隔10、20、30或60秒(根据您的选择)从类似于
setInterval()
的范围内继续调用以下函数,以检查该时间限制是否已过期

function check_if_session_expired() {
  let max_idle_minutes=60;
  let miliseconds_now = obj_date.getTime();
  let get_idle_time_in_miliseconds = localStorage.getItem("idle_time");
  let one_minute_to_milisecond = 1000 * 60;
  if ((Math.round(miliseconds_now / one_minute_to_milisecond) - Math.round(get_idle_time_in_miliseconds / one_minute_to_milisecond)) >= max_idle_minutes) {

    console.log("expired");
    //logout the user and clear sessionStorage/localStorage if you want
  } else {
    localStorage.setItem("idle_time",miliseconds_now);
  }
}

您可以使用Cookie来实现同样的功能。

因此,当chrome打开备份时,它是否会检查服务器以查看会话是否仍然处于活动状态?当您浏览网站的URL时,它会向Web服务器发送请求,而Web服务器将检查会话是否处于活动状态。如果会话处于非活动状态,它将不会为您提供服务器或将您重定向到登录页面。这实际上取决于您如何设计服务器端逻辑。那么我可以在IIS中添加一个会话过期标记吗?是的。IIS会话超时值在IIS配置中给出。20分钟是会话的默认到期时间。你可以改变它。请看一下这个链接:我在这里的回答演示了如何以编程方式处理这个问题。您可以使用任何服务器端语言来实现这一点。他们的逻辑都是一样的。