前言
第一次使用原版插件时统计图是没加载出来的,然后看着整体有些复古感觉是一个古老插件(后面找到了原插件仓库,作者还在更新,尴尬了)。于是就自己着手进行优化,后来突然想到如果做成一个模板页面放前台是怎样的,也就有了现在本站左侧访客那个页面,以及右侧博客信息中的浏览总数,数据也是出自这里,不过我还没来得及发教程。
新版插件除了保留了原插件的一些功能,还对外观,性能做了巨大优化。并且在插件中做了一个适配器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%) • 渐变视觉效果:为柱状图添加蓝色渐变背景和红色悬停效果 • 移动端自适应布局 • 列表/图表切换视图 • 优雅的加载动画 |
新版后台页面预览




Handsome前台效果可参考本站左侧访客导航页面
安装及更新方法
- 下载插件文件(文末)
- 在本地解压后把目录名改为VisitorLoggerPro(大小写必须一致,Typecho 1.3 对目录名更严格)
- 将改后的文件上传到/usr/plugins目录下
- 在 Typecho 后台启用插件
- 要把该文件
visitor-stats.php移动到handsome主题根目录(handsome主题适用) - 直接用新版本覆盖掉旧版本即可完成更新
- 升级到 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主题适用)
- 在 Typecho 后台创建新页面
- 在页面模板中选择"访客统计"
- 发布页面即可看到统计效果
插件设置
在 控制台 → 插件 → 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_sidCookie。身份标识全部由服务端按 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地址:

223 条评论
太厉害了
学习一下
学习一下
看看
kan kan
滴!学生卡!打卡时间:14:41:25,请上车的乘客系好安全带~
报错:Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in /www/wwwroot/blog.zeruns.com/var/Typecho/Db/Adapter/Pdo.php on line 125
把php脚本内存限制加大点试试
感谢博主分享
感谢分享
感谢分享,学习求通过
感谢分享
感谢分享OωO滴!
我也来试试
诶嘿,你这个导航页是飞牛nas里面的应用吧
3年博客网站站长打卡
滴!学生卡!打卡时间:18:06:35,请上车的乘客系好安全带~
好用吗
好东西,速来围观~|´・ω・)ノ
好用吗
滴!学生卡!打卡时间:09:28:30,请上车的乘客系好安全带~
支持博主,必须来试一下
比起有一百个朋友,不如有个比一百人还要重要的真心朋友。
123既然认准这条路,何必去打听要走多久。