OneNav主题修改日志-5:用户个人中心「我的足迹」414 错误修复记录

问题描述

问题现象:登录用户在【个人中心】页面点击【我的足迹】选项时,页面报错 414 (URI Too Long)

影响版本:OneNav 主题

F12 报错信息414 (URI Too Long)。这意味着浏览器尝试向服务器发送一个包含超长 URL 的请求,超过了服务器(Nginx/Apache)或 PHP 配置允许的最大长度限制。


问题原因

根本原因

「我的足迹」功能存在两个技术问题:

  1. 数据存储无数量限制 – 用户足迹数据存储在浏览器 localStorage 中 – 存储键名:ioUserFootprint_{user_id} – 原代码仅删除 7 天前的旧记录,对记录总数无限制 – 当用户浏览大量页面后,localStorage 中积累大量记录
  2. 请求方式不适合大数据量传输 – 原代码使用 GET 请求发送足迹数据 – GET 请求将数据拼接在 URL 中 – 当记录数达到 100+ 条时,URL 长度远超服务器限制(通常 2KB-8KB) – 导致 Nginx/Apache 等服务器返回 414 URI Too Long 错误

解决方案

修改文件

文件路径assets/js/main.jsassets/js/main.min.js

修改一:限制记录数量

位置setUserFootprint() 函数(约第 2218-2221 行)

修改内容:在删除 7 天旧记录后,添加只保留最近 100 条记录的限制

// 限制只保留最近100条记录
if (userFootprint.length > 100) {
userFootprint = userFootprint.sort((a, b) => new Date(b.visit_time) - new Date(a.visit_time)).slice(0, 100);
}

逻辑说明: 1. 检查当前记录数是否超过 100 条 2. 超过时,按访问时间降序排序 3. 截取前 100 条最新记录 4. 淘汰旧记录,保持数据精简

修改二:更改请求方式

位置getFootprint() 函数(约第 2297-2308 行)

修改内容:将 AJAX 请求从 GET 改为 POST

$.ajax({
  url: IO.ajaxurl,
  type: 'POST',  // 新增此行
  data: {
    action: action,
    type: type,
    style: style,
    columns: columns,
    posts: IO.footprintData,
    group: group,
    page: page
  },
  dataType: 'html',
})

优势: – POST 请求通过请求体传输数据,不受 URL 长度限制 – 支持传输大量数据 – 更安全,不会将敏感信息暴露在 URL 中


部署说明

  1. 修改 main.js 后需要重新压缩为 main.min.js
  2. 将两个文件上传到服务器对应目录: – /assets/js/main.js(开发版,可读) – /assets/js/main.min.js(生产版,压缩版)

生效方式

  • 立即生效:修改部署后,用户访问新页面时自动触发清理逻辑
  • 自动清理:下次访问任意页面时,超出 100 条的旧足迹记录将被自动删除
  • 无需手动操作:用户无需清空浏览器缓存或手动删除记录

修改记录

日期 修改内容 状态
2026-04-02 限制 localStorage 只保留最近 100 条足迹记录
2026-04-02 将足迹 AJAX 请求从 GET 改为 POST

注意事项

  1. 如果网站使用了 CDN 缓存,请清除 CDN 缓存后再测试
  2. 用户浏览器中的旧数据会在下次访问时自动清理
  3. 建议清理后让用户重新访问「我的足迹」页面验证功能正常

报告撰写日期:2026 年 4 月 2 日
适用主题版本:OneNav


© 版权声明

相关文章

暂无评论

none
暂无评论...