结论:阅读数要防刷,核心是「去重 + 延迟计数 + 服务端落库」,绝不能访客一进页面就直接给数据库 +1。
① 先定去重维度。登录用户按用户 ID 记,游客按 IP + UA 组合记,再配一个时间窗口(常见 12 或 24 小时),同一个人在这个窗口内刷多少次都只算一次阅读,这是最有效的防刷手段。
② 计数时机往后挪。别在页面 onload 就上报,可以延迟几秒、或者滚动到正文一半再触发一次异步请求;这样爬虫、误点秒退、单纯刷新都不会被计进去。
③ 写入方式要削峰。高频访问别每次都 UPDATE 帖子表,可以先用 Cache::remember 这类缓存把增量累加,再由 Cron::register 注册的定时任务定期合并落库,避免行锁打架把库拖慢。
④ 爬虫单独对待。搜索引擎和各类 AI 爬虫的 UA 可以识别出来,选择不计入阅读数或单独统计,免得被收录抓一遍阅读数就虚高。想核对是否异常,可以拿站点访客统计插件做交叉比对。
正式会员
认证极客






