Codeigniter 3 无操作打开页面时flashdata错误消息始终显示问题
问题原因
你的代码存在两个核心问题导致无操作打开登录页也会显示错误提示:
- 身份认证方法未做请求类型校验,GET请求访问该方法时会直接触发校验失败逻辑,设置错误提示后跳回登录页
- 视图层未做存在性判断直接输出flashdata,也会增加异常显示的概率
修复方案
1. 给身份认证方法加POST请求校验
在authentication方法最开头添加请求类型判断,仅允许POST请求走校验逻辑,非POST请求直接跳转登录页:
public function authentication(){ // 新增POST请求校验 if ($this->input->method() !== 'post') { redirect('Login/LoginPage'); } // 以下为原有逻辑保持不变 $empNum=$this->input->post('employeeNum'); $pwd=$this->input->post('password'); $user=$this->empNumAuth($empNum, $pwd); if($user) { if($user['PrivilegeLevel']==='1'){ $this->session->set_userdata($user); redirect('AdminDashboard/view'); } else if($user['PrivilegeLevel']=='2') { $this->session->set_userdata($user); redirect('UserDashboard/view'); } } else { $this->session->set_flashdata('msg','الرقم الوظيفي او رمز الدخول خاطئ'); redirect('Login/LoginPage'); } }
2. 视图层输出前判断flashdata存在
修改登录页的提示输出代码,仅当flashdata存在时才渲染提示内容:
<?php if ($this->session->flashdata('msg')): ?> <?php echo $this->session->flashdata('msg'); ?> <?php endif; ?>
可选排查
如果修改后问题仍存在,检查Login/LoginPage对应的控制器方法,确认没有调用$this->session->keep_flashdata('msg'),也没有其他代码对msg这个flashdata键名赋值。
内容的提问来源于stack exchange,提问作者فيصل سعد
相关产品推荐
相关产品推荐

