Heim > Backend-Entwicklung > PHP-Tutorial > 如何统计用户在某个页面的停留时长呢?

如何统计用户在某个页面的停留时长呢?

WBOY
Freigeben: 2016-06-06 20:45:44
Original
2173 Leute haben es durchsucht

首先,在服务器端进行统计,我个人感觉应该不可以吧,因为http协议是无状态的,浏览器与服务器之间并不会建立持久连接。这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应,连接就被关闭了。
所以就无法在服务器端对用户访问某个页面的时长进行统计了,只能统计出某个用户访问某个页面的具体时间吧?

请问,该如何实现这个需求呢?
注:在不适用第三方流量统计器的情况下

回复内容:

首先,在服务器端进行统计,我个人感觉应该不可以吧,因为http协议是无状态的,浏览器与服务器之间并不会建立持久连接。这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应,连接就被关闭了。
所以就无法在服务器端对用户访问某个页面的时长进行统计了,只能统计出某个用户访问某个页面的具体时间吧?

请问,该如何实现这个需求呢?
注:在不适用第三方流量统计器的情况下

看你要精确到什么颗粒度了

方案1:websocket
前端开个长连接,后台统计长连接时间。

方案2:ajax轮询
隔几秒发一个查询,后台记录第一与最后一个查询间隔时间

一般的方法都是记录每次请求的日志(包括uv标示,当前url,来源url,浏览器信息,ip,访问时间等),这些初始日志就可以分析出某个用户在某个url上停留多久(下一个页面请求时间-当页面时间),当然更精细的就要考虑tab页或新窗口问题。如果是最后一个页面访问,这种方式就很难获知停留时间了。
ajax定时提交当然可以解决,只是为了一个停留时间数据(这数据相对没有那么重要,误差较大),每个页面做一个定时ajax感觉还是小题大做了。当然如果你的ajax还提交其他信息(比如用户在页面上滚动条位置),那倒是可以尝试下的。

问题简单化:当用户每次发起一个http请求的时候记录url和时间戳,然后你后台计算不同类型的(即相同url,参数不一样)间隔时间,最后能够得出用户在不同类型页面的停留时间。
现在有些app应用就是只有一个页面,但你也可以通过url中的hash来区分不同的请求类型并加以计算,这样你就能够统计出用户在某个页面的停留时间。
如果是全部采用ajax方式加载的花只能对不同的请求地址进行计算了。
前提是你要使用一个并发量支持度很高的缓存系统,并且该缓存系统能够为你进行一些简单的数学计算,有幸的是市场上已经有了,你自己选个最能配合你出色完成任务的产品吧。

不是很懂这些 不过AJAX不是可以在网页切换的时候挂上些行为么?不能把数据发给服务器?

http://www.bangfx.com/research/?p=651
这个链接好像有点类似,给出了解决的思路

window的unload里可以做一些东西,在localStorage里
window.load(把上一次的发出去,生成一个起始时间点记录)
window.unload(生成一个结束时间点,计算一下停留时间,存到localStorage里)
这样一个用户只有唯一的最后一次访问没有记录,而不是每个session最后一次都没有记录

1、关闭窗口或者跳转的时候会触发window.onbeforeunload函数,可以再该函数中做处理(有兼容性问题)
2、统计完数据记录到本地cookies中,一段时间后统一发送
不过还是觉得ajax和websocket靠谱一点

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage