PHP-PHP该如何统计各页面访问时长

PHP-PHP该如何统计各页面访问时长

浮生未歇 发布于 2017-04-24 字数 135 浏览 1398 回复 7

如题,想做一个监控系统,统计各页面被访问的时长,用ajax轮询的访问一个脚本的话并发量高的时候撑不住,请教各位可有合适的方法或思路。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

甜柠檬 2017-09-20 7 楼

这有一个方案,利用websocket,每个页面开一个websocket连到服务端,然后页面将页面信息(哪个页面)传递给服务端(服务端开始计时),当页面关闭时,这个页面的websocket也随之关闭,这是服务端时能检测到的,然后服务端计算这个websocket存活时间,这个时间是非常准确的。

如果你会PHP的话可以用workerman来做,应该就几行代码就搞定了。就是在
websocket创建链接会触发Event::onGatewayConnect,里面记录个时间到session $_SESSION['start_time']=time()

链接建立后传递个页面url(用来判断是哪个url的websocket链接),在Event::onMessage里面做,同样是存到session中 $_SESSION['url']=xxx

链接关闭时会触发Event::onClose,这个方法里面得到时间差值(非常精确),time()-$_SESSION['start_time']

就这么简单,另外不用担心客户端不支持websocket,worerkman里面的websocket只要浏览器支持html5或者flash任意一种就可以。

清晨说ぺ晚安 2017-08-19 6 楼

一般都是通过分析web服务器日志,记录日志的方式可以是js的ajax请求或者1像素的图片

定期通过脚本分析日志得出某个页面的停留时间,不过最后一个访问的页面统计会有一些难度,因为不能确定离开的方式

瑾兮 2017-08-19 5 楼

打开页面立即用javascript计时,然后在onbeforeunload事件内通过ajax将当前页面id与时间提交给后台

归属感 2017-06-11 4 楼

看了上面的答案,深有所得,说说自己的想法。

本质上这种需求,也是很多系统的用户在线状态处理是相同的。

如果对精准度要求不太高,采用ajax应该就不错,这种请求在当下高并发的实现,压力并不大,这也是当前很多系统采用的方法。

如果有较高的需求,就是借用楼上一个关于websocket的解决方案,你也可以用node.js 实现一个socket来维护页面访问时长。

夜无邪 2017-06-05 3 楼

页面访问时间不一定就是页面打开的时间,如果用户打开一个页面,然后打开了一个新窗口的链接,源页面没有关、就一直开着,这是否也算访问时间呢?
所以,一般的做法是记录下用户每次打开页面的时间,两次打开页面的间隔时间一般就是访问时间

灵芸 2017-05-14 2 楼

上星期我也在做项目也越到这样的需求,请教公司架构师后给我的建议是跟你的一样使用轮询的,但是我考虑后觉得不妥,于是换了另一种方法,就是页面一加载,就记录时间戳A, js页面检测当离开本页面时候获取当前时间戳B, 用B-A得到时长,直接发送后端,参数: 页面标记 页面时长

想挽留 2017-05-08 1 楼

一般都是通过ajax来请求某个入口,然后保存到数据库中,你所说的,可能有网络原因没有发送成功。这个是无法避免的。可以忽略的。

我们项目的大致架构是这样的:
1.页面的访问数据会以ajax形式请求某个控制器,然后保存到redis队列里
2.然后启动若干个php进程来跑这个队列,把队列的数据存入MongoDB里,以天为单位,也就是一天的数据就是一个collection!
3.然后会有一个定时脚本去分析MongoDB里的数据(我们的是当天会去计算昨天的数据)。结果会存入Mysql的一张表中,这张表是用来保存计算的结果!方便后台查询结果

最后,关于一些统计,这就看你们的实际需求了。就是一些加减乘除的算法!