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

CI3中Try-Catch内调试$list_data_l变量及登录Forbidden问题排查

CodeIgniter3 AJAX登录Forbidden错误排查及调试方案

一、先排查Forbidden错误的常见原因

  • CSRF令牌验证失败:CodeIgniter3默认开启CSRF保护,AJAX请求必须携带正确的CSRF令牌。前端需同步提交csrf_token_name(默认是csrf_test_name)和对应的csrf_hash值,可通过表单隐藏域或AJAX参数传递。临时关闭config.php中$config['csrf_protection'] = FALSE测试,若错误消失则说明是CSRF问题。
  • XSS过滤触发拦截:表单验证规则中的xss_clean可能误判输入内容为恶意,可临时移除该规则测试是否恢复正常。
  • 数据库连接/权限问题:检查database.php中database_two的配置是否正确,确认数据库用户拥有login_session表的查询权限。
  • .htaccess配置问题:检查项目根目录的.htaccess规则,是否存在拦截AJAX请求的Rewrite规则,或目录权限不足。

二、$list_data_l变量的替代调试方案

AJAX请求下直接用var_dump/print_r/echo会导致响应格式不符合JSON预期,前端无法正常显示,可采用以下方案:

1. 写入CodeIgniter系统日志

利用框架自带的日志功能,将变量内容写入日志文件:

// 在$list_data_l赋值后添加
log_message('debug', '查询结果: ' . print_r($list_data_l->result(), true));
log_message('debug', '执行的SQL语句: ' . $this->two_db->last_query());
  • 确保config.php中$config['log_threshold'] = 2(开启Debug日志),日志文件位于application/logs/目录下。

2. 返回JSON格式调试信息

临时修改响应内容,将调试数据封装成JSON返回,在浏览器开发者工具的Network面板查看:

// 替换原有的var_dump($list_data_l); die;
$debug_data = array(
    'status' => 'debug',
    'list_data' => $list_data_l->result(),
    'sql' => $this->two_db->last_query(),
    'csrf_hash' => $this->security->get_csrf_hash()
);
exit(json_encode($debug_data));

3. 写入服务器临时文件

将变量内容写入服务器的临时文件,直接查看文件内容:

// 确保目录有写入权限,比如项目内的logs目录
file_put_contents(APPPATH . 'logs/debug_login.txt', print_r($list_data_l, true) . "\n\n", FILE_APPEND);

4. 输出数据库错误信息

若查询失败,直接捕获数据库错误:

$db_error = $this->two_db->error();
if (!empty($db_error)) {
    log_message('error', '数据库错误: ' . $db_error['message'] . ' 错误码: ' . $db_error['code']);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:35:23