Javascript 停止恢复会话
有没有办法告诉chrome在重新打开关闭的页面时不要恢复会话?也许是一个特别的标题 当我的员工登录到我的公司应用程序时,它非常依赖于州。如果他们在60分钟内处于非活动状态,我想将他们注销并删除所有与他们正在做的事情相关的数据,但问题是Chome有一个方便的功能,它将在你离开的地方重新打开你的页面,而不会对任何事情提出疑问。我的网站不会知道他们关闭了浏览器两天,并且Javascript 停止恢复会话,javascript,google-chrome,iis,Javascript,Google Chrome,Iis,有没有办法告诉chrome在重新打开关闭的页面时不要恢复会话?也许是一个特别的标题 当我的员工登录到我的公司应用程序时,它非常依赖于州。如果他们在60分钟内处于非活动状态,我想将他们注销并删除所有与他们正在做的事情相关的数据,但问题是Chome有一个方便的功能,它将在你离开的地方重新打开你的页面,而不会对任何事情提出疑问。我的网站不会知道他们关闭了浏览器两天,并且setTimeout在接下来的50分钟内不会启动 我还有另外两个古怪的解决办法,但我更希望我能告诉Chrome不要试图挽救旧会话,而是
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分钟是会话的默认到期时间。你可以改变它。请看一下这个链接:我在这里的回答演示了如何以编程方式处理这个问题。您可以使用任何服务器端语言来实现这一点。他们的逻辑都是一样的。