Codeigniter Session登录问题:chek2用户无法访问home_sekda页面
解决CodeIgniter中Sekda角色登录跳转失败的问题
我帮你分析下,你遇到的问题大概率是目标页面的登录状态校验逻辑不匹配,或者现有登录函数的查询逻辑可以优化。下面一步步来解决:
首先排查核心问题:目标页面的权限拦截
你先去检查admin控制器里的home_sekda方法,是不是只校验了status_login_admin这个Session标识?比如可能有这样的代码:
public function home_sekda() { // 只认admin的登录状态,sekda的session不被识别 if (!$this->session->userdata('status_login_admin')) { redirect('admin/login'); } // ...页面其他逻辑 }
如果是这样,必须把校验改成匹配status_login_sekda:
public function home_sekda() { // 校验sekda的登录状态 if (!$this->session->userdata('status_login_sekda')) { redirect('admin/login'); } // ...页面其他逻辑 }
优化登录函数的查询逻辑(可选但推荐)
你的原代码做了两次数据库查询,其实可以合并成一次,既提高效率也减少出错概率:
function login_proses() { $username = $this->input->post('username'); $password = $this->input->post('password'); // 一次性获取匹配用户名和密码的用户 $user = $this->db->get_where('tabel_users', [ 'username' => $username, 'password' => $password ])->row(); if ($user) { // 根据用户的status字段分配不同的登录状态 $session_data = ['username' => $username]; if ($user->status == '1') { $session_data['status_login_admin'] = 'sudah_login'; redirect('admin/home'); } elseif ($user->status == '0') { $session_data['status_login_sekda'] = 'sudah_login'; redirect('admin/home_sekda'); } $this->session->set_userdata($session_data); } else { // 账号密码不匹配,返回错误页 $this->template->load('templatelogin','admin/login/login_error'); } }
额外需要检查的点
- Session库是否正常加载:确保在
application/config/autoload.php里已经把session加入自动加载列表:$autoload['libraries'] = array('session'); - 密码安全性提醒:你现在是明文存储密码,这非常不安全!建议改用CodeIgniter支持的密码加密方案,比如注册时用
password_hash()加密,登录时用password_verify()验证:// 注册时加密密码示例 $hashed_pwd = password_hash($raw_password, PASSWORD_DEFAULT); // 登录时验证示例 if (password_verify($password, $user->password)) { // 密码匹配,继续登录流程 } - 路由是否正确:确认
admin/home_sekda对应的控制器方法存在,没有拼写错误,或者在routes.php里有没有错误的路由规则导致跳转异常。
按照上面的步骤调整后,Sekda角色的用户应该就能正常跳转到home_sekda页面了。
内容的提问来源于stack exchange,提问作者Rizki Kurniawan
相关产品推荐
相关产品推荐

