如何查看服务器仍处于活动状态的浏览器连接?

时间:2014-03-26 12:38:54

标签: java php client-server

当汇款发生时,如果浏览器关闭会发生什么呢? 我的意思是当我在服务器上处理然后在提交所有更改之前我想检查客户端是否仍在线。如果突然关闭浏览器,则撤消更改。

我的代码就像:

function some(){
 do_some_stmt;//also keep track what changes has been done
 do_some_stmt;//also keep track what changes has been done
 ...............

if(connection_is_still_alive()){

// final commit
}else{
  undo_the_previous_changes();
}
}

所以你可以用php回答,java我觉得如果它可能的话就可以在为客户端 - 服务器架构设计的每种编程语言中使用它。

基本上我想知道在脚本的中间是否可以在线检查浏览器?

欢迎任何建议,并提前感谢让我理解。

2 个答案:

答案 0 :(得分:0)

您可以创建一个javascript函数,以间隔方式加载PHP页面。

这样的事情:

创建3个文件:file.js,onlinecheck.php和log.txt

file.js:

function tellTheServerThatIAmStillHere() {
  $.post('onlinecheck.php', {onlineStatus: iAmStillHere}); /* Sends a post to the file onlinecheck.php with the parameter "onlineStatus: iAmStillHere" */
  timer = window.setTimeout(tellTheServerThatIAmStillHere,8000); /* sends a new post every 8 seconds */
}

onlinecheck.php:

<?php
  if(isset($_POST["onlineStatus"])) {
    if($_POST["onlineStatus"] == "iAmStillHere") {
      $fd = fopen("log.txt", "w");
      fwrite($fd, date("[d.m.Y - H:i:s] ").$_SERVER['REMOTE_ADDR'].": He is still here"); //Puts out something like "[26.03.2014 - 13:57:33] 127.0.0.1: He is still here"
      fclose($fd);
    }
  }

现在您可以在日志文件中查看浏览器是否仍在线,如果这是您的意思。

答案 1 :(得分:0)

您可以使用时间戳更新会话变量,并检查变量是否低于或等于/略大于更新间隔,而不是在Paul L的答案中使用日志文件。

但是你永远不能确定用户之前没有关闭浏览器一毫秒。

您可以让来自浏览器的JavaScript调用从服务器接收答案:已完成/未完成,并且在检索完成后,让用户通过按下现在可见的按钮(在给定时间内,否则您应该让你回滚。