AI摘要

Typecho博客系统的访客统计插件VistorLoggerPro发布,提供访问国家/地区统计、IP分布统计等详细访问统计功能,并进行隐私保护处理。

前言

第一次使用原版插件时统计图是没加载出来的,然后看着整体有些复古感觉是一个古老插件(后面找到了原插件仓库,作者还在更新,尴尬了)。于是就自己着手进行优化,后来突然想到如果做成一个模板页面放前台是怎样的,也就有了现在本站左侧访客那个页面,以及右侧博客信息中的浏览总数,数据也是出自这里,不过我还没来得及发教程。

新版插件除了保留了原插件的一些功能,还对外观,性能做了巨大优化。并且在插件中做了一个适配器adapter.php,它可以实现原版插件与当前插件的无缝衔接,也能同时兼容 Typecho 1.2 旧类名和 1.3 的命名空间。当前版本是 v2.4.0,统计口径已经对齐 Umami 开源实现,不再用追踪 Cookie。


介绍

这是一个为 Typecho 博客系统开发的访客统计插件,基于原版的 VisitorLogger 修改。插件提供访问国家/地区、IP 分布、省份、路由和趋势分析,并对 IP 做了匿名化处理。后台有「访客日志」和「趋势分析」两个菜单。

功能特点

功能分类功能描述
数据统计功能• 三种统计模式:前端埋点(推荐,对齐 Umami)、混合模式、仅服务端
• 四项核心指标:PV(页面浏览量)、独立IP数、独立访客数(UV)、访问次数(会话数)
• Umami 访客口径:visitor_id = IP + UA + 月盐(按月轮换),对应 Umami sessionId
• Umami 访问口径:session_id 为 30 分钟无活动超时的 visit,对应 Umami visitId;旧数据自动回退 IP 间隔算法
• 前端埋点只上报 url / referrer / title 等元数据,身份全部在服务端计算,不使用追踪 Cookie
• 访问国家/地区统计(Top 30)
• IP分布统计(已匿名化处理)
• 省份访问统计图表(TOP 30)
• 路由访问统计分析(页面访问量统计,显示TOP 20)
• 访问时间统计(按日期分布)
• 管理员访问自动排除
• 可配置爬虫 UA 过滤(默认名单已扩充,含 GPTBot、Claude、Headless 等)
数据筛选功能• 日期范围选择器
• 快捷时间选择(今天、昨日、最近7天、本周、上周、本月、上月、最近30天、全部)
• 按钮选中状态高亮显示
• 默认只加载近7天数据,优化首次加载速度
数据展示功能• 四条曲线同时展示:支持PV、独立IP、独立访客(UV)、访问次数四项指标同屏对比
• 趋势分析页面:支持多维度数据分析
• 动态时间轴:选择单日时自动切换为小时段显示(0:00-23:00)
• 智能图例设计:优化颜色方案和图例布局,提升可读性
• ECharts环形图表展示方式
• 列表视图支持(详细数据展示)
• 图表悬停效果(显示详细信息)
• 自适应图表区域
数据管理功能• 删除特定IP记录功能(支持模糊匹配)
• 数据库自动优化,并自动补齐 time / country / ip 索引
• 时区自动转换功能,确保访客时间记录准确
• 禁用时删除数据表开关:默认关闭,禁用插件时保留 visitor_log
兼容性功能• 适配器支持(adapter.php),实现原版 VisitorLogger 与当前插件的无缝衔接
• 兼容 Typecho 1.2.x ~ 1.3.0(1.3 命名空间、后台 flex 布局、用户权限校验)
• 自动数据迁移,保留原有统计数据
• 智能SQL回退机制:兼容MySQL 5.5+到8.0+所有版本
• 数据库自动升级:自动检测并添加 user_agent、visitor_id、session_id 等字段
• 兼容不同主题,特别优化 handsome 主题
性能优化• 异步API数据加载(getVisitStatistic.php和getTrendData.php)
• 解决大数据量加载问题,提高页面响应速度(从10s优化到2s)
• 90万+ 日志量级下,靠索引和 SQL 聚合显著加速统计查询
• 统计查询减负:合并多余 COUNT、避免 DATE(time) 破坏索引、趋势会话数改为一次分组计算
• 后台国家/路由统计改为 SQL 聚合,不再把全表拉进 PHP
• 访客日志 AJAX 翻页:翻页只刷新左侧日志表,右侧图表不再整页重载
• 查询跨度超过 30 天时,缓存延长至 15 分钟
• 智能资源加载机制:ECharts和Flatpickr的CDN优先加载,失败时自动回退到本地文件
• 优化移动端显示
隐私保护• 不使用 _vlp_uid / _vlp_sid 这类追踪 Cookie
• IP地址匿名化处理(只显示前两段)
• 明确的隐私声明
• 符合相关法律法规要求
• 数据安全存储
界面特性• 统计摘要卡片:四项核心指标的数值展示区域
• 指标说明区域:按当前 Umami 口径说明 PV、独立IP、UV、访问次数
• 响应式设计:指标说明区域支持桌面端4列网格和移动端单列布局
• Typecho 1.3 后台布局适配:宽屏/高缩放下区块宽度一致
• 界面美化优化:使用彩色图标和现代化卡片设计
• 饼图尺寸优化:适当放大饼图显示区域(半径增加约25%)
• 渐变视觉效果:为柱状图添加蓝色渐变背景和红色悬停效果
• 移动端自适应布局
• 列表/图表切换视图
• 优雅的加载动画

新版后台页面预览

2025-08-20T07:11:17.png

2025-08-20T07:09:05.png

2025-08-20T07:10:31.png

2025-08-19T18:12:44.png

Handsome前台效果可参考本站左侧访客导航页面
前台预览


安装及更新方法

  1. 下载插件文件(文末)
  2. 在本地解压后把目录名改为VisitorLoggerPro(大小写必须一致,Typecho 1.3 对目录名更严格)
  3. 将改后的文件上传到/usr/plugins目录下
  4. 在 Typecho 后台启用插件
  5. 要把该文件visitor-stats.php移动到handsome主题根目录(handsome主题适用)
  6. 直接用新版本覆盖掉旧版本即可完成更新
  7. 升级到 2.4.x 后,到插件设置里选择「前端埋点」并保存一次。脚本由插件自动注入,不用改主题

系统要求

项目要求
PHP版本7.4+(推荐 8.0+,已在 8.3 验证)
Typecho版本1.2.x ~ 1.3.0(推荐 1.2.1,已适配 1.3.0)
数据库MySQL 5.5+ / 8.0+(自动检测并回退 SQL)
主题Handsome 可使用前台访客统计页(需拷贝模板文件)

使用说明

基本使用(Handsome主题适用)

  1. 在 Typecho 后台创建新页面
  2. 在页面模板中选择"访客统计"
  3. 发布页面即可看到统计效果

插件设置

在 控制台 → 插件 → VisitorLoggerPro → 设置 中可配置:

选项说明默认
统计模式前端埋点 / 混合 / 仅服务端。推荐前端埋点,对齐 Umami表单默认前端埋点;没保存过配置的旧站,运行时仍按仅服务端
蜘蛛过滤设置按 关键字=>显示名 配置爬虫 UA,命中则不记入内置常见搜索引擎与爬虫
忽略的IP地址不记录的 IP,支持精确匹配、通配符、CIDR,IPv4 和 IPv6 都可以空
IPV4数据库选项纯真 或 ip2region纯真
启用访客统计是否启用统计功能启用
禁用时删除数据表开启后,禁用插件会删除 visitor_log 及全部记录关闭(保留数据)

三种模式的区别:

  • 前端埋点(推荐):浏览器只上报页面元数据,服务端按 IP + UA + 月盐识别访客,按 30 分钟无活动识别一次访问。不执行 JS 的爬虫通常不计。脚本由 header 钩子自动注入,页面源码里搜 VisitorLoggerPro tracker 或 tracker.js 就能确认。主题需要输出 $this->header()。
  • 混合模式:服务端直接按同一套 Umami 算法写 visitor_id / session_id,前端不再上报,避免重复计数。
  • 仅服务端:更早的简易 IP + UA 口径,用来兼容历史行为。
2.4.0 起不再依赖 _vlp_uid / _vlp_sid Cookie。身份标识全部由服务端按 Umami 算法计算。前端用 X-VLP-Cache 维持同一次 visit,对齐 Umami 的 x-umami-cache。

后台面板

启用后,管理员菜单会出现:

  • 访客日志:访问明细、IP 查询/删除、地区与路由图表。翻页是 AJAX,只刷新左侧表格
  • 趋势分析:PV / 独立 IP / UV / 会话 四条曲线

隐私保护

本插件已实现以下隐私保护措施:

  • 不种植追踪 Cookie,访客身份在服务端用 IP、UA 和月盐计算,盐按月轮换
  • IP地址匿名化处理(只显示前两段)
  • 明确的隐私声明
  • 符合相关法律法规要求

技术实现

  • 前端:ECharts 图表库;埋点脚本对照 Umami tracker,只上报元数据
  • 后端:PHP + MySQL;身份算法在 UmamiIdentity.php,对照 Umami /api/send
  • 数据存储:Typecho 数据库;visitor_id / session_id 对应 Umami 的 sessionId / visitId
  • 数据处理:通过 API 异步加载,支持 PV、UV、IP、会话四项指标
  • 访客算法:IP + User-Agent + 月盐
  • 访问算法:30 分钟无活动超时
  • 兼容性:自动检测 MySQL 版本,智能回退到简化算法
  • Typecho 适配:adapter.php 兼容 1.2 旧类名与 1.3 命名空间(PluginInterface / ActionInterface / Utils\Helper 等)

更新日志

版本类型更新内容
v2.4.0
(2026-08-16)
对齐 Umami 口径• 取消 Cookie 访客/会话标识:不再使用 _vlp_uid / _vlp_sid
• 访客(UV):服务端 visitor_id = hash(站点, IP, UA, 月盐),对应 Umami sessionId
• 访问(会话):session_id 为 30 分钟超时的 visit,对应 Umami visitId;前端用 X-VLP-Cache 维持 visit
• 前端埋点:只上报 url/referrer/title 等元数据,身份全部服务端计算
• 混合模式:服务端直接套用同一算法,前端不再 beacon,避免双计
• 趋势页底部的指标说明已改成这套口径
v2.2.11
(2026-08-15)
Bug 修复• 消除 adapter.php 重复声明告警:Typecho 1.2+/1.3 自动加载命名空间类时会顺带创建旧式别名,适配器再 class_alias 会报 Cannot declare class ... already in use。现于自动加载后再次检测目标符号,避免重复别名
v2.2.10
(2026-08-15)
Typecho 1.3.0 兼容• 后台布局适配:覆盖 1.3 grid.css 里 .container { display:flex } 导致的区块宽度不一致
• 钩子参数修复:修正 handle 钩子参数解析,避免模板页异常
• Action / 权限:使用 Widget\User::alloc() 兼容 1.3 用户权限校验
• 适配器增强:完善 PluginInterface、ActionInterface、Utils\Helper 等别名
• API 初始化:统计接口优先走 Widget\Init,兼容 1.2 / 1.3
• 禁用时删除数据表开关:默认关闭并保留数据;开启后禁用插件会删除 visitor_log
• 宽屏布局:访客日志 / 趋势分析主要区块统一全宽
v2.2.9
(2026-08-15)
查询性能优化• 自动补齐数据库索引:idx_time、idx_time_country、idx_ip、idx_time_ip,打开统计页即可创建,不用重装
• 统计 API 减负:去掉多余全表 COUNT;路由聚合避免破坏索引
• 趋势 API 加速:用时间范围条件替代 DATE(time)=;会话数按天/小时一次分组计算
• 后台面板:国家/路由统计改为 SQL GROUP BY,不再把全部日志载入 PHP
• 缓存策略:查询跨度超过 30 天时缓存延长至 15 分钟
• 访客日志 AJAX 翻页:翻页只刷新左侧日志表
v2.2.8
(2025-08-20)
图表精细化优化• 线条宽度优化:将所有趋势线条宽度从4px减小到2px,符号大小从8px减小到6px
• 左轴刻度智能优化:重构Y轴刻度算法,左轴最大值设为刚好比数据最大值大的整数+1,消除过多空白区域
• 动态间隔计算:根据数据范围智能计算Y轴间隔(1、5、10、20、50、100),提升图表可读性
• 线条区分度提升:优化后的图表能更清晰地区分IP数、访客数(UV)、访问数(SV)三条线的变化趋势
• 视觉平衡改进:图表整体更加精致,避免了线条过粗带来的视觉负担
技术改进• 刻度算法重构:从复杂的分段判断简化为基于数据驱动的动态计算
• 显示精度提升:确保每条线的微小变化都能在图表上清晰体现
• 用户体验优化:解决了数据值较小时线条重合难以区分的问题
v2.2.7
(2025-08-19)
用户体验优化• 趋势分析页面说明:在趋势图表下方新增四项核心指标详细说明区域
• 指标概念解释:详细说明PV、独立IP数、独立访客数(UV)、访问次数的概念和统计方法
• 技术实现展示:展示各指标的SQL查询语句和数据获取方式
• 响应式设计:指标说明区域支持桌面端4列网格和移动端单列布局
• 界面美化优化:使用彩色图标和现代化卡片设计,提升专业性
代码结构优化• 精简文件结构:移除冗余的header.php、footer.php、menu.php文件
• 代码内嵌优化:将HTML头部和尾部代码直接集成到主要文件中
• 减少依赖关系:简化文件引用结构,提升代码可维护性
v2.2.6
(2025-08-19)
图表视觉优化• 饼图显示优化:去除冗余标题,仅保留"路由访问统计"标题,界面更简洁
• 饼图尺寸优化:适当放大饼图显示区域,提升数据可视性和视觉效果
• 路由统计增强:路由显示数量从10个扩展到20个,提供更全面的访问分析
• 柱状图完整显示:解决路由访问统计图加载不完整问题,增加底部空间并优化标签显示
• 渐变视觉效果:为柱状图添加蓝色渐变背景和红色悬停效果,提升交互体验
界面细节改进• 标签显示优化:调整饼图标签显示逻辑,适应放大后的图表尺寸
• 图例布局调整:优化图例位置和间距,适配更大的饼图显示
• 移动端适配:改进小屏设备上的图表布局和显示效果
v2.2.5
(2025-08-19)
兼容性改进• 智能SQL回退机制:实现SQL窗口函数的智能回退,兼容MySQL 5.5+到8.0+所有版本
• 数据库自动升级:自动检测并添加user_agent字段,无需手动操作数据库
• 错误处理优化:完善API响应错误信息,便于问题排查和调试
性能优化• 查询性能提升:优化单日和多日数据查询算法,支持按小时和按天双维度统计
• 内存使用优化:重构数据库查询逻辑,减少内存占用
• 加载速度提升:改进前端默认加载逻辑,提升用户体验
v2.2.0
(2025-08-19)
图表功能升级• 四条曲线同时展示:支持PV、独立IP、独立访客(UV)、访问次数四项指标同屏对比
• 智能图例设计:优化颜色方案和图例布局,提升可读性
• 交互体验优化:改进悬停提示和图表动画效果
• 移动端适配:优化小屏设备上的图表显示和统计摘要布局
视觉设计改进• 统计摘要卡片:新增四项核心指标的数值展示区域
• 响应式布局:完善移动端统计项目的排列和显示
• 配色方案优化:采用专业的数据可视化配色,提升视觉效果
v2.1.5
(2025-08-19)
API架构升级• 多指标数据计算:重构getTrendData.php,支持四项指标的并行计算
• 智能会话算法:实现基于IP和时间间隔(30分钟)的会话识别算法
• 数据聚合优化:优化大数据量场景下的查询性能和响应速度
• 错误容错机制:增强API稳定性,提供详细的错误信息反馈
算法实现• UV计算逻辑:基于IP+User-Agent组合的独立访客识别算法
• 会话识别机制:30分钟超时的智能会话计算,支持跨日统计
• 时间维度处理:单日按小时统计,多日按天统计的自适应算法
v2.1.4
(2025-08-19)
数据库架构升级• 新增user_agent字段:扩展visitor_log表结构,支持更精准的访客识别
• 自动结构升级:插件启用时自动检测并升级数据库表结构
• 数据完整性保障:确保现有数据完整性,新字段向后兼容
统计指标体系重构• 四项核心指标:全新引入PV(页面浏览量)、独立访客数(UV)、访问次数(会话数)
• 精准统计算法:结合IP地址和User-Agent的独立访客识别机制
• 数据记录增强:开始记录User-Agent信息,提升统计准确性
v2.1.3
(2025-08-19)
新增功能• 趋势分析页面:全新的访客趋势分析功能,支持独立IP和访客总数双曲线图表
• 智能时间范围:新增昨日、本周、上周、本月、上月快捷选择
• 动态时间轴:选择单日时自动切换为小时段显示(0:00-23:00)
• 数据统计显示:在图表中显示选定时间范围内的总访客数和独立IP数
• 自适应全部时间:全部时间范围自动从第一条访客记录开始计算
优化改进• 优化API数据获取逻辑,提升趋势分析页面加载速度
• 改进图表交互体验,支持悬停显示详细数据
• 完善错误处理机制,提供更好的用户反馈
v2.1.2
(2025-08-13)
优化• 智能资源加载机制:实现ECharts和Flatpickr的CDN优先加载,失败时自动回退到本地文件
• 提升加载稳定性:解决网络环境不稳定时图表库加载失败的问题
• 优化用户体验:无需手动选择加载方式,系统自动选择最佳加载策略
• 增强容错能力:多重加载保障,确保图表功能正常运行
技术改进• 重构资源加载逻辑,采用Promise-based异步加载
• 添加详细的加载状态日志,便于问题排查
• 优化错误处理机制,提供友好的用户提示
v2.1.1
(2025-06-21)
优化• 移除本地chart.js文件(约200KB),减少插件体积
• 全部使用CDN加载ECharts图表库
修复• 删除panel.php中对本地chart.js的引用
v2.1.0
(2025-06-18)
前台优化• 新增API端点(getVisitStatistic.php)处理数据聚合
• 解决前台大数据量加载问题,提高页面响应速度(10到2s)
• 添加日期范围选择器和快捷按钮(今天、最近7天、最近30天、全部)
• 实现按钮选中状态高亮显示
• 优化首次加载速度,默认只加载近7天数据
• 增高环形图展示区域,改善视觉效果
• 修复图表悬停效果
后台优化• 添加删除特定IP记录功能(支持模糊匹配)
• 重构图表加载逻辑,使用异步API获取数据
• 添加省份访问统计图表
• 优化后台路由统计,解决X轴信息重叠问题
• 优化日期选择功能
修复• 修复内容解码错误(ERR_CONTENT_DECODING_FAILED)
• 修复SQL错误(Unknown column 'province')
v2.0.2
(2025-06-13)
功能增强• 新增后台忽略IP名单功能,支持多种IP格式
• 前台删除管理员(自己)访问记录功能,保持统计数据纯净
• 优化CDN环境下IP识别机制,解决IP不准确问题
• 添加IP地址过滤器,支持自定义过滤规则
修复• 修复PHP 8.0环境下的弃用函数警告
• 修复在某些主题下的样式冲突问题
• 修复日期选择器在移动端的显示问题
• 优化数据库查询,减少资源占用
v2.0.1
(2025-05-15)
功能改进• 修复时区问题:将数据库time字段从TIMESTAMP改为DATETIME类型
• 添加服务器时区自动转换功能,确保访客时间记录准确
• 优化数据迁移处理,自动转换已有记录的时区
• 添加适配器(adapter.php),实现原版插件与当前插件的无缝衔接
修复• 修复时区显示不正确的问题
• 修复数据库查询兼容性问题
v2.0.0
(2025-04-23)
主要功能• 初始版本发布
• 实现基本访客统计功能
• 国家/地区访问统计
• IP分布统计(已匿名化处理)
• ECharts环形图表展示方式
• 列表视图支持
• 移动端适配
隐私保护• IP地址匿名化处理(只显示前两段)
• 明确的隐私声明
• 符合相关法律法规要求
其他• 优化移动端显示
• 管理员访问自动排除

问题说明


插件启用失败解决办法:
有一部分小伙伴之前使用过VisitorLogger插件,然后如果直接启用VisitorLoggerPro的话会报错
1、只需要把VisitorLogger相关文件全部删除即可,也就是两者不能共存。
2、数据库表不需要修改,但也可以把bot_list表删掉因为用不到。

Typecho 1.3.0 后台布局不协调:
请升级到 v2.2.10+。该版本已适配 1.3 后台 flex 布局,并修复访客日志 / 趋势分析页宽度不一致的问题。

升级到 2.4.0 后数字和以前对不上:
这是口径变化,不是丢数据。请到插件设置里保存一次「前端埋点」。旧站如果从没保存过统计模式,运行时仍按「仅服务端」。前端埋点不统计不执行 JS 的爬虫,UV 也会按月盐轮换,和旧的 IP+UA 计数不会完全一致。


最后

希望大家顺手点点star

如果有使用问题或者开发建议,可在评论区提出

Github地址:

此处内容需要评论回复后(审核通过)方可阅读。

最后修改:2026 年 09 月 26 日
如果觉得我的文章对你有用,请随意赞赏
END
本文作者:
文章标题:VistorLoggerPro - Typecho访客统计和趋势分析插件
本文地址:https://blog.ybyq.wang/archives/97.html
版权说明:若无注明,本文皆Xuan's blog原创,转载请保留文章出处。