日期:2014-05-19  浏览次数:20701 次

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

------解决方案--------------------
引用:
引用:引用:
提交的时候,监测考生的session状态(用ajax),如果没有了,那么浮出一个登陆窗口,让登陆,登陆以后再提交就好了。

要测试这个状态,你自己去考,考的时候,拔掉网线。写好了,再插上。
既然错误不重现,就制造错误,看你代码错了,还是那错误是个意外

引用 6 楼 xodbc……

那你应该解决的是客户端掉线后为什么无法连接到服务器的问题,而不是服务器判断客户端是否掉线的问题。
------解决方案--------------------
引用:
引用:引用:
引用:引用:
提交的时候,监测考生的session状态(用ajax),如果没有了,那么浮出一个登陆窗口,让登陆,登陆以后再提交就好了。

要测试这个状态,你自己去考,考的时候,拔掉网线。写好了,再插上……

好吧,那问题还是必须要在客户端检测掉线....我想多了
不知道你在ajax轮询的时候这1%的考生返回的是什么样的信息,不论任何情况,正确的返回只有一种,就算post到离线页面也不会获得正确的反馈信息。
所以我想知道那1%考生是如何发现无法提交的?点击没有反应?error没执行?还是点完直接提示成功?
------解决方案--------------------
可以尝试着去定时从服务器给每个session发送请求,每个考生那边都自动回应,服务器定时追踪考生所在session的回应。如果追踪不到这回应,证明session结束了。这只是个思路,具体的要你自己去实现了
------解决方案--------------------
需要一个心跳系统,AJAX方式每隔10秒等时间访问一次服务器,服务器判断10秒没有心跳请求的算暂时掉线。
------解决方案--------------------
应该首先排除session的问题,因为所有考生的session创建时间应该是接近的,系统对session的影响方式是相同的,在同一个应用下session不会出现不同的状况。

我一直不推荐靠js在客户端进行硬性的而且是唯一有效的检查,无论你的程序如何加密,客户端环境如何规范,浏览器动态脚本程序都不可能是绝对安全有效的,就连ls说的flash也可以被简单的通过浏览器设置屏蔽掉。

如果问题出现在生产环境,而且客户端控制程序存在可能的漏洞,而当事人却无法详细的描述问题或前后描述有出入,不排除是作弊的一种手段,毕竟这是考试,将问题推给考试系统似乎可以掩人耳目。

有没有可能通过长连接解决,而不是通过客户端心跳判断连接有效性?
有没有可能连接从最初就是无效的,因为连接总数超出了某些服务器端的限制?
如果问题一直无法重现,且客户端脚本能够确定有效,那就建议对脚本的具体行为进行记录,如:吊线前心跳状态,定期保存的请求提交了几次等等,客户端页面有没有被刷新,脚本有没有被重置等等可能对解决问题有帮助的信息。
------解决方案--------------------
引用:
引用:需要一个心跳系统,AJAX方式每隔10秒等时间访问一次服务器,服务器判断10秒没有心跳请求的算暂时掉线。
我用了类似的方式,为了避免服务器被冲垮,我的时间间隔长一些,是4分钟一次,这办法对大多数管用,但总有几个出问题

赶紧升级服务器,心跳系统你值得一试.10秒太短,4分太长,该为30秒到一分钟就差不多了.还有就是考生的表单信息要定时去保存,等考生发现自己掉线,再次登陆的时候可以读取到上一次未提交的数据.这个很困难,貌似没见到什么网站能做的这么给力.