Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使用户没有';不响应JavaScript';s";确认();?_Javascript_Php - Fatal编程技术网

即使用户没有';不响应JavaScript';s";确认();?

即使用户没有';不响应JavaScript';s";确认();?,javascript,php,Javascript,Php,这是我最初使用的代码: setInterval(function(){ r=confirm("You are about to be logged out! Press cancel if you want to remain logged in."); if (r == true){ window.location.href = '../logout.php'; }else{ location.reload(); } },30000); 确

这是我最初使用的代码:

setInterval(function(){
  r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
  if (r == true){
    window.location.href = '../logout.php';
  }else{
    location.reload();
  }
},30000);
确认对话框等待用户的操作。如果操作为“取消”,它们将保持登录状态。如果操作为“OK”,则会重定向到logout.php页面。问题是,如果用户没有响应,则在经过30秒后,他们不会注销

然后我想我可以使用两个时间间隔:

setInterval(function(){
  window.location.href = '../logout.php';
},60000);


setInterval(function(){
  r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
  if (r == true){
    window.location.href = '../logout.php';
  }else{
    location.reload();
  }
},30000);
但是由于confirm()方法停止了脚本,因此60000毫秒永远无法实现。有什么办法可以让它发挥作用吗?

这是我的建议

  • 启动一个计时器,让用户注销
  • 启动graceTimer以显示链接
  • 如果单击链接,计时器将重新启动
  • 否则,用户将注销
  • tId,tId1;
    const end=15000,//更改为任意值-30分钟
    grace=3000,//3秒-在现实生活中应该是30秒
    计时器=()=>{
    清除超时(tId);
    tId=setTimeout(函数(){
    //location.replace(“../logout.php”)
    控制台日志(“注销”)
    }(完),;
    },
    graceTime=()=>tId1=setTimeout(切换grace,结束-grace),
    toggleGrace=()=>document.getElementById(“statylink”).classList.toggle(“hide”),
    初始化=()=>{
    定时器();
    graceTime()
    };
    document.getElementById(“statylink”).addEventListener(“单击”,函数(e){
    e、 预防默认值();
    切换格雷斯();
    init()
    })
    init()
    .hide{
    显示:无;
    }

    您每30秒询问您的用户是否希望保持登录?1分钟只是一个例子。这不是真正的问题。我本可以写60万。我想说的是,你可能应该过度思考这个概念。假设你正在写一个关于Stackoverflow的问题,一个确认对话框正好在你按下enter键的时候打开。您已注销,您的问题已消失。您是对的,确认将停止脚本。如果您想让脚本继续在后台执行,最好使用基于HTML的modalSay,如果他们离开桌面,或者关闭浏览器而不响应。