现在要实现一个记录用户学习时长的功能。具体是:有一门课程,课程中有很多资源,如教学录像、教学课件、习题等。一个资源对应一个资源展示页,用户进入一个资源展示页后可以浏览资源的详细内容(视频直接用播放器播放,文本类资源都转换成flash播放)。现在我想记录每个用户浏览每个资源所花费的时间,即用户停留在页面中的时间。从用户打开页面开始计时,页面关闭或session失效超时则停止计时。这段时间内的时间算做用户学习这个资源的时间。如果做得严格些,用户切换到另外的页面也要停止计时,切换回来再继续计时(如果这个复杂先不考虑也行)。想问问大家有没有好的实现办法。
sessionCreated时打开及时器sessionDestroyed时计算时间
session.getCreationTime();
可以获取session创建时间 毫秒单位
个人感觉还得是根据用户的操作来做判断、、、比如说session、、、默认半小时、、半个小时没做操作、、就会小时了、、、你记录它的登录时间、、退出时间就好了、、、
以下是页面停留时间的代码、、、你可以根据自己的需求去改、、
<html>
<head>
<title>阿里西西网页特效演示,页面停留时间</title>
</head><BODY onLoad="init(); window.setTimeout('show_secs()',1);">
<!-- 用<BODY onLoad="init(); window.setTimeout('show_secs()',1);">替换原有的<body> -->
<!--将以下代码加入HTML的<Body></Body>之间--><SCRIPT LANGUAGE="JAVASCRIPT">
<!--
var ap_name = navigator.appName;
var ap_vinfo = navigator.appVersion;
var ap_ver = parseFloat(ap_vinfo.substring(0,ap_vinfo.indexOf('(')));
var time_start = new Date();
var clock_start = time_start.getTime();
var dl_ok=false;
function init ()
{
if(ap_name=="Netscape" && ap_ver>=3.0)
dl_ok=true;
return true;
}
function get_time_spent ()
{
var time_now = new Date();
return((time_now.getTime() - clock_start)/1000);
}
function show_secs () // show the time user spent on the side
{
var i_total_secs = Math.round(get_time_spent());
var i_secs_spent = i_total_secs % 60;
var i_mins_spent = Math.round((i_total_secs-30)/60);
var s_secs_spent = "" + ((i_secs_spent>9) ? i_secs_spent : "0" + i_secs_spent);
var s_mins_spent ="" + ((i_mins_spent>9) ? i_mins_spent : "0" + i_mins_spent);
document.fm0.time_spent.value = s_mins_spent + ":" + s_secs_spent;
window.setTimeout('show_secs()',1000);
}
// -->
</SCRIPT>
<form name="fm0" onSubmit="0">
<FONT COLOR="#888888" size="-1">您在本网页的停留时间:</FONT><INPUT type="text" name="time_spent" size=7 onFocus="this.blur()">
</form></body></html>
<a href="http://www.alixixi.com/Dev/HTML/jsrun/">欢迎访问阿里西西网页特效集</a>
HttpSessionListener也只能坐到Session超时的时候的自动调用而用ajax在画面关闭的瞬间提交也不靠谱。因为非正常关机或者断电的情况无法判断但是有一种方法可以判断,就是把资料课程全部做成视频的,没有进度条的视频。这样通过流传输情况来看他学了多少时间。
服务端测量客户端的时间,手段只有一个。在客户端用javascript做一个监控程序,当浏览器发生变化的时候,通知服务端,服务端进行时间记录。但客户端的东西用户都可以改,无论怎样都不能做到安全严密。
你是不是想做试用时间这个功能呢。
按道理来说,用软件这个东西你不用管客户是不是用了。就好像你开个辅导班上课一样,到时间就上课,你管学生是否缺席,睡觉,上厕所,看小说呢不管干啥都得交辅导费。这是一个道理