从Linux迁移到Windows服务器后WordPress出现WP_Session_Tokens类未找到错误
问题描述
将网站从Linux服务器迁移至Windows服务器后,WordPress核心出现致命错误,调试日志如下:
[22-Jul-2022 13:07:54 UTC] PHP Fatal error: Uncaught Error: Class 'WP_Session_Tokens' not found in D:\\Sites\\subdoms\\test\\wp-includes\\class-wp-user-meta-session-tokens.php:17 Stack trace: #0 D:\\Sites\\subdoms\\test\\wp-settings.php(188): require() #1 D:\\Sites\\subdoms\\test\\wp-config.php(105): require_once('D:\\\\Sites\\\\web_98...') #2 D:\\Sites\\subdoms\\test\\wp-load.php(50): require_once('D:\\\\Sites\\\\web_98...') #3 D:\\Sites\\subdoms\\test\\wp-blog-header.php(13): require_once('D:\\\\Sites\\\\web_98...') #4 D:\\Sites\\subdoms\\test\\index.php(17): require('D:\\\\Sites\\\\web_98...') #5 {main} thrown in D:\\Sites\\subdoms\\test\\wp-includes\\class-wp-user-meta-session-tokens.php on line 17迁移前网站启用了W3 Total Cache插件,已移除该插件,且
class-wp-user-meta-session-tokens.php等WordPress文件看起来正常,请问该错误是否与此插件相关?
关联判断与原因分析
这个错误和W3 Total Cache没有直接关联,但不排除间接影响:
- 若仅删除插件文件未通过后台正常停用,可能在
wp-config.php或web.config(Windows替代Linux的.htaccess)中残留插件配置代码,干扰核心文件加载顺序。 - 插件在Linux下生成的缓存文件,迁移到Windows后会因路径分隔符(Linux用
/,Windows用\)不兼容,导致缓存残留引发加载异常。
错误核心是WP_Session_Tokens类未被找到,该类默认定义在wp-includes/class-wp-session-tokens.php中,正常会在class-wp-user-meta-session-tokens.php加载前引入。出现这个问题大概率是迁移时的文件系统差异(大小写敏感/不敏感)导致文件加载失败,或是核心文件缺失/损坏。
解决方案
修复核心文件完整性
下载对应版本的WordPress安装包,解压后覆盖wp-includes目录下所有文件。Windows和Linux文件系统大小写规则不同,迁移时可能出现文件名大小写错乱,导致核心文件无法被正确识别加载,覆盖核心文件可解决此问题。清理插件残留配置
打开wp-config.php,删除所有W3 Total Cache相关的定义代码(比如define('W3TC_CONFIG_FILE', ...));检查网站根目录的web.config文件,移除插件相关的规则配置。清除缓存文件
删除网站根目录下的wp-content/cache文件夹,彻底清除跨系统残留的缓存内容。检查文件权限
在Windows服务器上,确保Web服务器进程(如IIS)对wp-includes、wp-content等目录拥有读取权限,避免因权限不足导致核心文件无法加载。
内容的提问来源于stack exchange,提问作者koupmi

