CodeIgniter中flashdata无法正常取值 新服务器部署后获取数据为空
CodeIgniter flashdata跨方法获取为空问题解决步骤
- 首先确认session存储配置有效性:flashdata基于session实现,优先检查
application/config/config.php中的session存储配置:
若使用文件存储session,确认$config['sess_save_path']对应的目录在新服务器上存在,且赋予了web运行用户(如www-data、apache、nginx)的读写权限,权限不足会导致session无法写入,flashdata自然无法传递。 - 核对cookie相关配置是否匹配新服务器环境:检查以下配置是否和部署的实际域名、协议一致:
域名、协议配置错误会导致session cookie无法正常在请求间传递,出现session丢失的问题。// 示例配置,需替换为你实际的部署信息 $config['cookie_domain'] = '.你的实际域名.com'; $config['cookie_path'] = '/'; $config['cookie_secure'] = FALSE; // 如果部署了https需改为TRUE $config['sess_cookie_name'] = 'ci_session'; - 排查服务器重定向规则:如果新服务器配置了http强制跳转https、www域名跳转非www域名这类301/302规则,表单提交时多一次跳转就会消耗掉flashdata的有效期(flashdata仅对下一次请求有效),导致post方法读取不到。可以将表单提交地址写死为和add方法访问地址完全同协议、同域名的路径,验证是否是跳转导致的问题。
- 快速验证定位问题:可以在add方法设置flashdata后打印session内容确认写入成功:
再在post方法最开头打印全部session内容:// add方法中set_flashdata后添加 var_dump($this->session->userdata('check_id'));die;
如果post方法中整个session都为空,即可确定是session本身的配置问题,和flashdata逻辑无关。// post方法开头添加 var_dump($this->session->userdata);die; - 临时兼容方案:如需快速恢复功能,可以改用普通session存储用完手动删除,替代flashdata:
// add方法中替换set_flashdata $this->session->set_userdata('check_id',$details['user_id']); // post方法中读取后销毁 $check_id = $this->session->userdata('check_id'); $this->session->unset_userdata('check_id');
内容的提问来源于stack exchange,提问作者Akhilesh Jha
相关产品推荐
相关产品推荐

