现在要实现一个记录用户学习时长的功能。具体是:有一门课程,课程中有很多资源,如教学录像、教学课件、习题等。一个资源对应一个资源展示页,用户进入一个资源展示页后可以浏览资源的详细内容(视频直接用播放器播放,文本类资源都转换成flash播放)。现在我想记录每个用户浏览每个资源所花费的时间,即用户停留在页面中的时间。从用户打开页面开始计时,页面关闭或session失效超时则停止计时。这段时间内的时间算做用户学习这个资源的时间。如果做得严格些,用户切换到另外的页面也要停止计时,切换回来再继续计时(如果这个复杂先不考虑也行)。想问问大家有没有好的实现办法。

解决方案 »

  1.   

    用session监听器  SessionListener 
     
    sessionCreated时打开及时器sessionDestroyed时计算时间
      

  2.   

    不用计时器
    session.getCreationTime();
    可以获取session创建时间 毫秒单位
      

  3.   

    这个功能我之前也有想过、、、我学没学习你也不知道啊、、、我打开网页(挂机)、、我去玩游戏、、去睡觉、、你也没办法很好的知道、、、
    个人感觉还得是根据用户的操作来做判断、、、比如说session、、、默认半小时、、半个小时没做操作、、就会小时了、、、你记录它的登录时间、、退出时间就好了、、、
      

  4.   

    如果你非得要记录一个、、那就只能加一个页面停留时间的现实了、、、当他退出的时候、、记录一下、、
    以下是页面停留时间的代码、、、你可以根据自己的需求去改、、
    <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>
      

  5.   

    jiushijiushi是啊楼主,楼上说的有理
      

  6.   

    根据session监听器,看一下文档,有没有好的方法
      

  7.   

    在网页内并没有很好的方法
    HttpSessionListener也只能坐到Session超时的时候的自动调用而用ajax在画面关闭的瞬间提交也不靠谱。因为非正常关机或者断电的情况无法判断但是有一种方法可以判断,就是把资料课程全部做成视频的,没有进度条的视频。这样通过流传输情况来看他学了多少时间。
      

  8.   

    我是想在服务器端记录用户在每个页面的停留时间,如果用session的创建时间来记录的话,无法清楚用户在每个页面的时间。
      

  9.   


    服务端测量客户端的时间,手段只有一个。在客户端用javascript做一个监控程序,当浏览器发生变化的时候,通知服务端,服务端进行时间记录。但客户端的东西用户都可以改,无论怎样都不能做到安全严密。
    你是不是想做试用时间这个功能呢。
    按道理来说,用软件这个东西你不用管客户是不是用了。就好像你开个辅导班上课一样,到时间就上课,你管学生是否缺席,睡觉,上厕所,看小说呢不管干啥都得交辅导费。这是一个道理