我打开了 CI CSRF 保护,它适用于 http。一旦我打开 https(通过将站点的基本 URL 更改为 https 并将所有流量从 http 重定向到 https),我开始看到:
csrf token is missing on request
日志中的错误。Codeigniter 在两种情况下报告此错误:
1) csrf 令牌不在 POST 请求中 2) csrf 令牌 cookie 未设置或已过期。
我们所有的 post 请求(主要是 AJAX)都有一个 csrf 令牌,因为我们的自定义 ajax 函数默认包含它,所以我认为它必须是 #2。此外,我在配置中选择了安全和非安全 cookie 设置,在这两种情况下都会出现此错误。
我的猜测是 csrf 令牌 cookie 未设置或未加密。我的主要问题是我无法在自己的系统(Ubuntu 上的 Chrome)上重现,但是一旦我投入生产,我就看到日志立即爆发。
关于我做错了什么甚至如何调试这种情况的任何想法?谢谢!
会话和 Cookie 配置:
$config['sess_cookie_name'] = 'session';
$config['sess_expiration'] = 1209600;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['cookie_prefix'] = "my";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = myconfig('use_https'); //this is true when https
//is forced, false otherwise