此系统在考试的时候是全屏的
该系统需要检测考生是否已经掉线,我就用jquery的$.ajax()方法进行轮询来检测,开发和测试的时候可以检测出用户掉线的问题。实际使用的时候,大概有400多个考生同时在线,只有2个考生出现了问题。问题的情况是考生已经掉线但系统没有提示。导致考生在表单里写了一大堆东西却无法提交。
这个问题快把我折磨疯了。根本没法测试,根本重现不了bug。webjquery测试

解决方案 »

  1.   

    $.ajax({
        url: url,
        data: $("#form1").serialize(),
        type: "POST",
        dataType: "json",
        cache: false,
        success: function(data) {
            // some code
        },
        error:tipDisconnect
    });tipDisconnect是我提示掉线的一个函数,我请教一下IE有没有可能把post方法的ajax请求给缓存?
      

  2.   

    可以让提交表单前用ajax校验session是否已经失效,如果失效,弹出对话框重新登录;
      

  3.   

    提交的时候,监测考生的session状态(用ajax),如果没有了,那么浮出一个登陆窗口,让登陆,登陆以后再提交就好了。要测试这个状态,你自己去考,考的时候,拔掉网线。写好了,再插上。
      

  4.   

    好吧,那问题还是必须要在客户端检测掉线....我想多了
    不知道你在ajax轮询的时候这1%的考生返回的是什么样的信息,不论任何情况,正确的返回只有一种,就算post到离线页面也不会获得正确的反馈信息。
    所以我想知道那1%考生是如何发现无法提交的?点击没有反应?error没执行?还是点完直接提示成功?
      

  5.   

    可以尝试着去定时从服务器给每个session发送请求,每个考生那边都自动回应,服务器定时追踪考生所在session的回应。如果追踪不到这回应,证明session结束了。这只是个思路,具体的要你自己去实现了
      

  6.   

    求详解,我的系统是web的,用的http协议,如何给客户端发信息?
      

  7.   

    需要一个心跳系统,AJAX方式每隔10秒等时间访问一次服务器,服务器判断10秒没有心跳请求的算暂时掉线。
      

  8.   

    应该首先排除session的问题,因为所有考生的session创建时间应该是接近的,系统对session的影响方式是相同的,在同一个应用下session不会出现不同的状况。我一直不推荐靠js在客户端进行硬性的而且是唯一有效的检查,无论你的程序如何加密,客户端环境如何规范,浏览器动态脚本程序都不可能是绝对安全有效的,就连ls说的flash也可以被简单的通过浏览器设置屏蔽掉。如果问题出现在生产环境,而且客户端控制程序存在可能的漏洞,而当事人却无法详细的描述问题或前后描述有出入,不排除是作弊的一种手段,毕竟这是考试,将问题推给考试系统似乎可以掩人耳目。有没有可能通过长连接解决,而不是通过客户端心跳判断连接有效性?
    有没有可能连接从最初就是无效的,因为连接总数超出了某些服务器端的限制?
    如果问题一直无法重现,且客户端脚本能够确定有效,那就建议对脚本的具体行为进行记录,如:吊线前心跳状态,定期保存的请求提交了几次等等,客户端页面有没有被刷新,脚本有没有被重置等等可能对解决问题有帮助的信息。