求记录用户在页面停留时间的方法

ouyka 2010-12-03 04:29:48
现在要实现一个记录用户学习时长的功能。具体是:有一门课程,课程中有很多资源,如教学录像、教学课件、习题等。一个资源对应一个资源展示页,用户进入一个资源展示页后可以浏览资源的详细内容(视频直接用播放器播放,文本类资源都转换成flash播放)。现在我想记录每个用户浏览每个资源所花费的时间,即用户停留在页面中的时间。从用户打开页面开始计时,页面关闭或session失效超时则停止计时。这段时间内的时间算做用户学习这个资源的时间。如果做得严格些,用户切换到另外的页面也要停止计时,切换回来再继续计时(如果这个复杂先不考虑也行)。想问问大家有没有好的实现办法。
...全文
817 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengtao1235 2011-03-11
  • 打赏
  • 举报
回复
也同样的要求啊,有一点不一样,现在有很多这样的培训网站,记录客户观看视频的时间来记录学时,就像上课记录一样,然后再有考试的内容。
ousyuryu 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ouyka 的回复:]

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

服务端测量客户端的时间,手段只有一个。在客户端用javascript做一个监控程序,当浏览器发生变化的时候,通知服务端,服务端进行时间记录。但客户端的东西用户都可以改,无论怎样都不能做到安全严密。
你是不是想做试用时间这个功能呢。
按道理来说,用软件这个东西你不用管客户是不是用了。就好像你开个辅导班上课一样,到时间就上课,你管学生是否缺席,睡觉,上厕所,看小说呢。。。。。。不管干啥都得交辅导费。这是一个道理
ouyka 2010-12-06
  • 打赏
  • 举报
回复
我是想在服务器端记录用户在每个页面的停留时间,如果用session的创建时间来记录的话,无法清楚用户在每个页面的时间。
rainsilence 2010-12-05
  • 打赏
  • 举报
回复
在网页内并没有很好的方法
HttpSessionListener也只能坐到Session超时的时候的自动调用

而用ajax在画面关闭的瞬间提交也不靠谱。因为非正常关机或者断电的情况无法判断

但是有一种方法可以判断,就是把资料课程全部做成视频的,没有进度条的视频。这样通过流传输情况来看他学了多少时间。
  • 打赏
  • 举报
回复
根据session监听器,看一下文档,有没有好的方法
cheniqit1 2010-12-04
  • 打赏
  • 举报
回复
这个为了用户的体验性,至少在记时的页面加个表钟什么的,让用户知道把。不然体验性就有大大的问题哈。
QQ1024877065 2010-12-04
  • 打赏
  • 举报
回复
jiushijiushi是啊楼主,楼上说的有理
QQ1024877065 2010-12-04
  • 打赏
  • 举报
回复
你是想在服务端统计某个用户用资源的时间,还是想提示用户用了多少时间。
ousyuryu 2010-12-04
  • 打赏
  • 举报
回复
楼主应该把需求说清楚点

你是想在服务端统计某个用户用资源的时间,还是想提示用户用了多少时间。
huangchbao 2010-12-04
  • 打赏
  • 举报
回复
如果你非得要记录一个、、那就只能加一个页面停留时间的现实了、、、当他退出的时候、、记录一下、、
以下是页面停留时间的代码、、、你可以根据自己的需求去改、、
<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>
huangchbao 2010-12-04
  • 打赏
  • 举报
回复
这个功能我之前也有想过、、、我学没学习你也不知道啊、、、我打开网页(挂机)、、我去玩游戏、、去睡觉、、你也没办法很好的知道、、、
个人感觉还得是根据用户的操作来做判断、、、比如说session、、、默认半小时、、半个小时没做操作、、就会小时了、、、你记录它的登录时间、、退出时间就好了、、、
ousyuryu 2010-12-03
  • 打赏
  • 举报
回复
不用计时器
session.getCreationTime();
可以获取session创建时间 毫秒单位
zcp1985 2010-12-03
  • 打赏
  • 举报
回复
做下标记,以备不时之需。
ousyuryu 2010-12-03
  • 打赏
  • 举报
回复
用session监听器 SessionListener

sessionCreated时打开及时器

sessionDestroyed时计算时间

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧