PHP编程思想之埋点统计技术方案

背景

由于公司业务转型,系统也跟随由原来强制登录改成非强制登录,涉及很多业务模块的编程实现都需要进行升级改造。而原来系统由php编写的埋点模块也需要升级。

技术方案分析

原埋点技术方案中,统计uv是通过每次记录用户ID来实现的,统计的uv是非常精准的。不够在新的业务需求之下,如果不是已经登录的用户我们是无法记录用户ID,则默认记录就为0。这样统计的结果误差非常大,毕竟对于很多新用户第一次访问就注册登录概率比较少。那么该如何区分未登录用户,且登录之后还能识别是同一个用户呢?

首先想到的是能否把登录之前的访问记录存储在本地,在用户注册登录的时候再和用户ID进行关联,一次上报服务器。很快就被自己否决了,接口要提供给h5、小程序、app三端同时访问,对于客户端存储比较麻烦,尤其是h5;还有如果用户不注册登录,那么就一直上报不了数据了。

基于这个思路,继续思考。在统一时间基本上访问的多是一个用户,觉大多数人不会来回的切换用户。那么一个客户端就等于一个用户,这样可以给每个设备用户生成一个身份ID,与用户ID没有直接关系。这样每次上报的时候用身份ID替换用户ID来标记跟踪用户。在用户注册登录之后再把用户ID和身份ID做一个关联。这样就解决了未登录用户被识别成一个uv的问题。

最终技术方案

  1. 客户端打开先读取身份ID,没读取到的去服务器获取身份ID,永久持久化到本地。
  2. 客户端通过身份ID,session(可以为空,上次的session),服务端判断是否session过期觉得返回的是新session还是老的session。
  3. 客户端切换的页面上报数据(携带页面信息,身份ID,session)

详细的技术方案如图:
技术方案图

至于方案落地细节就不在多说了。

感觉现在汉字都不认识我了,写的感觉读起来不是很顺,抱歉。