Azure应用服务WebJob出现PHP session_start() wincache存储处理器找不到警告
解决Azure WebJob中PHP session_start()找不到wincache的问题
这个问题我之前帮不少开发者排查过,本质是Azure WebJob的PHP运行环境要么没启用wincache扩展,要么默认的会话存储处理器配置成了wincache但环境不支持。给你几个可行的解决方案,按需选择:
方案1:换用文件存储会话(最快捷,适合多数后台任务)
如果你的WebJob不需要分布式会话共享,直接改用文件存储就能绕过wincache的问题。修改代码如下:
// 先指定会话存储为文件类型 ini_set('session.save_handler', 'files'); // 设置一个WebJob目录下的可写路径(避免临时目录被清理) $sessionDir = __DIR__ . '/sessions'; // 确保目录存在,不存在则创建 if (!is_dir($sessionDir)) { mkdir($sessionDir, 0777, true); } ini_set('session.save_path', $sessionDir); // 再启动会话 session_start();
注意:触发式WebJob如果多实例运行,文件会话无法跨实例共享,但如果是单实例或者后台任务不需要会话共享,这个方案完全够用。
方案2:启用wincache扩展(必须用wincache时)
如果你业务上依赖wincache,按以下步骤配置:
- 首先在Azure App Service的应用设置里,添加
PHP_INI_SCAN_DIR配置项,值设为D:\home\site\ini(建议用专门的ini子目录,避免和其他文件混淆)。 - 通过Kudu控制台(App Service的高级工具里打开)进入
D:\home\site\ini目录,创建extensions.ini文件,写入:extension=wincache.dll session.save_handler = wincache - 重启你的App Service和WebJob,让配置生效。
注意:确保你用的PHP版本是Windows平台的(Azure App Service的PHP默认是Windows版),且版本支持wincache(PHP 7.0到8.1都支持,8.2+可能需要确认)。
方案3:移除session_start()(如果后台任务不需要会话)
很多WebJob作为后台任务,其实根本不需要会话功能。如果你的业务逻辑不依赖session,直接注释或删除session_start();这行代码,问题直接解决,这也是最简单的方案。
内容的提问来源于stack exchange,提问作者LatentDenis
相关产品推荐
相关产品推荐

