You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter无法将会话保存至数据库及相关报错问题排查

解决CodeIgniter Session数据库驱动报错“Configured database connection is persistent. Aborting.”

问题背景

你在配置CodeIgniter使用数据库存储Session时遇到了以下错误:

Exception: Configured database connection is persistent. Aborting. /var/app/current/system/libraries/Session/drivers/Session_database_driver.php 94

切换到files驱动时功能正常,说明问题出在数据库连接的持久化设置上。

解决方案

CodeIgniter的Session数据库驱动不支持持久化数据库连接——因为持久连接会导致会话数据的隔离性失效,所以驱动会主动终止这种配置。你需要修改数据库连接配置:

  1. 打开数据库配置文件:application/config/database.php
  2. 找到你用于Session存储的数据库连接配置项,将持久连接开关设置为FALSE:
    // CodeIgniter 早期版本用 pconnect 键
    $db['default']['pconnect'] = FALSE;
    // CodeIgniter 3.x+ 版本改用 persistent 键
    $db['default']['persistent'] = FALSE;
    
  3. 保存配置后重启应用,再测试Session是否能正常写入数据库。

额外验证点

  • 确保config.php中配置的sess_save_path对应的ci_sessions表结构正确:
    CREATE TABLE IF NOT EXISTS `ci_sessions` ( 
        `id` VARCHAR(128) NOT NULL, 
        `ip_address` VARCHAR(45) NOT NULL, 
        `timestamp` INT(10) UNSIGNED DEFAULT 0 NOT NULL, 
        `data` BLOB NOT NULL, 
        KEY `ci_sessions_timestamp` (`timestamp`) 
    );
    
  • 确认数据库用户对ci_sessions表拥有读写权限,避免因权限不足导致Session写入失败。

原因说明

Session_database_driver在初始化阶段(对应报错的第94行)会检查当前数据库连接是否为持久化连接,一旦检测到就抛出异常。这是因为持久连接会被多个请求复用,无法保证每个请求的Session数据独立,可能引发数据覆盖、会话混乱等问题,所以CodeIgniter强制禁止这种配置。

内容的提问来源于stack exchange,提问作者PHP User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:52