codeigniter中$config['sess_save_path']为空、null或相对路径会导致mkdir(): invalid path错误,必须设为绝对路径(如fcpath . 'writable/sessions'),且父目录需存在、权限含执行位(x),同时须配置有效的encryption_key。

sess_save_path 配置为空或相对路径导致 mkdir(): Invalid path
错误信息 mkdir(): Invalid path 看似权限问题,实则 90% 是 $config['sess_save_path'] 没设对。CI 的 Session_files_driver 会主动调用 mkdir() 初始化路径,若该值为 NULL、空字符串或相对路径(如 './sessions'),PHP 就无法解析出合法目录,直接报错。
必须用绝对路径,且父目录需已存在:
-
$config['sess_save_path'] = FCPATH . 'writable/sessions';(推荐,FCPATH指向 Web 根目录) - 手动创建目录:
mkdir -p /var/www/html/writable/sessions - 设权限前先确认属主:
chown www-data:www-data /var/www/html/writable/sessions(Nginx+PHP-FPM 场景) - 权限设为
0700即可,不是'700'字符串 —— 否则 PHP 当作十进制 700 解析,实际权限变成01254截断后是0755
encryption_key 未配置引发 session 初始化失败
CodeIgniter 3.0+ 要求 session 加密必须启用,即使 $config['sess_encrypt_cookie'] = FALSE,底层仍依赖 encryption 类生成 session ID。若 $config['encryption_key'] 为空或长度不足,session 启动时会静默失败,无明确报错,但 $this->session->set_userdata() 不生效。
正确做法:
- 先加载 encryption 库:
$this->load->library('encryption'); - 生成密钥:
bin2hex($this->encryption->create_key(16))(输出 32 位十六进制字符串) - 填入配置:
$config['encryption_key'] = 'a1b2c3d4e5f678901234567890abcdef'; - 切勿复用旧项目密钥,否则可能因加密上下文不一致导致 session 解析失败
AJAX 请求中 session 变量丢失
CI 3.x 在部分版本中存在 AJAX 请求下 session 自动销毁的 bug:当请求头不含完整 Cookie 或 User-Agent 变化较大时,sess_match_useragent = TRUE(默认值)会导致 session ID 被拒绝,新会话被创建,旧数据不可见。
安全地重置 OpenClaw agent sessions,支持备份、预览、恢复和批量操作。用于:1) 清理过期的 agent 会话上下文,2) 重置特定 agents 的 session,3) 批量重置六部/秘书 sessions,4) 查看和恢复历史备份。当用户需要"reset session"、"清理 se...
临时修复方式(按优先级排序):
- 关闭 UA 匹配:
$config['sess_match_useragent'] = FALSE;(开发阶段最快验证) - 确保 AJAX 请求携带完整 Cookie:
xhr.withCredentials = true;(前端 JS) + 后端响应加Access-Control-Allow-Credentials: true - 检查
$config['cookie_domain']是否含多余空格或尾部斜杠(如'.example.com '或'.example.com/'),这会导致 Cookie 无法被客户端正确发送
目录有写权限但 fopen() 或 move_uploaded_file() 失败
常见现象:is_dir() 返回 true,mkdir() 无报错,但后续写文件失败,报错类似 A problem was encountered while attempting to move the uploaded file。
根本原因是 Linux 目录缺少执行(x)权限 —— 它控制“能否进入目录”和“能否访问目录内文件元数据”,没有它,PHP 无法遍历、打开或写入该目录下的任何文件。
检查与修复:
- 运行
ls -ld /path/to/sessions,看权限字段第三组是否含x(如drwxr-xr-x✅,drw-r--r--❌) - 补执行位:
chmod +x /var/www/html/writable/sessions - 更稳妥写法:
chmod 755 /var/www/html/writable/sessions(重设完整权限,避免 umask 干扰)
这个点最容易被忽略:权限检查只盯 w,却忘了 x 对目录而言才是“可操作”的前提。










