WordPress不使用PHP $_SESSION,所谓“清理会话”实为清理_transient_timeout_%和_transient_%缓存键:必须先删timeout键再删值键,否则触发无效查询;多站点需同步处理_site_transient;删后须优化表。
wordpress 本身不使用 php 的 $_session 机制管理用户会话,所以你在 phpmyadmin 里根本找不到“wordpress 用户会话”对应的表或记录——这是个常见误解。所谓“清理过期会话”,实际要处理的是两类东西:一是数据库里残留的认证 cookie 元数据(wp_options 中的 _transient 和 _site_transient),二是 mysql 层面的真实连接会话(show processlist 显示的活跃连接),二者完全无关。
为什么 wp_options 里没有 session 表?
WordPress 登录状态靠加密 Cookie(如 wordpress_logged_in_*)维持,不依赖 PHP session 存储。它不会往数据库写 session_id 或 session 数据,因此不存在“WordPress 会话表”。你看到的 wp_usermeta 里的 session_tokens 字段,只是 JWT 风格的长期登录令牌(用于“记住我”),不是传统会话;它不会自动过期,也不该被批量删除。
真正该清理的是 _transient_timeout_* 这类缓存键
很多人误把 transient 当作“会话”,其实它是插件/主题存的临时数据,靠 _transient_timeout_XXX 控制生命周期。漏删 timeout 键会导致每次 get_transient() 都触发无效查询,拖慢数据库。
- 必须先删 timeout:
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%'; - 再删值键:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'; - 多站点需额外处理:
_site_transient_timeout_*和_site_transient_* - 别用
TRUNCATE TABLE wp_options——会重置自增 ID,破坏选项插入逻辑
MySQL 连接会话(PROCESSLIST)和 WordPress 无关
phpMyAdmin 的“进程列表”显示的是当前 MySQL 客户端连接(比如你的浏览器、WP-CLI、某个卡住的查询),不是 WordPress 用户会话。终止这些进程只影响数据库连接本身,不会登出用户,也不会清理任何缓存。
- 查看命令:
SHOW PROCESSLIST; - 终止指定连接:
KILL [ID];(ID 来自进程列表第一列) - 常见误操作:看到大量
sleep状态就全杀——那很可能是正常空闲连接,杀掉反而引发重连风暴 - 真正该关注的是
Time列超长(如 > 60 秒)且State为Locked或Copying to tmp table的进程
最易被忽略的点是:清理完 wp_options 后,必须点“优化表(Optimize table)”——否则碎片化会让后续查询越来越慢,尤其当 autoload='yes' 的选项变多时,影响更明显。
立即学习“PHP免费学习笔记(深入)”;



















