Php Codeigniter会话已登录客户到管理员登录

Php Codeigniter会话已登录客户到管理员登录,php,codeigniter,session,logging,Php,Codeigniter,Session,Logging,我在Codeigniter中开发了电子商务网站,但我有一个主要问题 在这个站点中,如果我登录到管理面板,而不是从管理面板注销,然后尝试登录到客户面板,那么即使我登录到客户面板,它也会自动重定向到管理面板 您可以在线测试:管理面板链接为 管理员电子邮件:admin@gmail.com 密码:admin 客户:ali@gmail.com 通过:c%$#@ 下面是我在控制器/登录类中的代码 //admin login public function __construct() {

我在Codeigniter中开发了电子商务网站,但我有一个主要问题

在这个站点中,如果我登录到管理面板,而不是从管理面板注销,然后尝试登录到客户面板,那么即使我登录到客户面板,它也会自动重定向到管理面板

您可以在线测试:管理面板链接为

管理员电子邮件:admin@gmail.com
密码:admin
客户:ali@gmail.com
通过:c%$#@

下面是我在控制器/登录类中的代码

//admin login
  public function __construct()
    {
        parent::__construct();
        if($this->session->userdata('admin_email'))
        {
            return redirect("admin");
        }


    }

    public function doLogin()
    {
        $post=$this->input->post();
        $this->load->model("Authentication","au");
        $data=$this->au->doLogin($post);
        if($data)
        {
            $this->session->set_userdata("admin_email",$data);
            return redirect("admin");
        }
        else
        {
            $this->session->set_flashdata("failed","Email and Password is not correct");
            return redirect("login");
        }

    }
    //customer login
    public function do_c_Login()
    {
        $post=$this->input->post();
        $this->load->model("Authentication","au");
        $data=$this->au->do_c_Login($post);
        if($data)
        {
            $c_email=$data->c_email;
            $c_id=$data->c_id;
            $this->session->set_userdata("c_email",$c_email);
            $this->session->set_userdata("c_id",$c_id);
            return redirect("shop/profile");
        }
        else
        {
            $this->session->set_flashdata([
                "msg"=>"Email and Password do match",
                "class"=>"danger",
                "heading"=>"ERROR"
                ]);
            return redirect("shop/login");
        }

    }
这是controller/admin中的代码

public function __construct()
    {
        parent::__construct();
        if(!$this->session->userdata('admin_email'))
        {
            return redirect("login");
        }
        $this->load->model("Order_management","om");
        $this->load->model("user_management","um");
        $this->load->model("inventory_management","im");

    }
以下是客户的店铺代码/登录名

if(!$this->session->userdata('c_email'))
        {
            return redirect("shop/login");
        }

当然会发生,因为您设置了
admin@gmail.com
会话中
当您离开管理面板时,它仍在
会话中

当然会发生这种情况。您需要检查持久用户数据(“管理员电子邮件”)中是否设置了管理员电子邮件地址。在清除此项之前,他们将始终重定向到管理区域,直到您清除此用户数据,但他们未被授权为管理员。您不应该这样做强制重定向。您应该将控制器分为两个控制器:一个用于客户,另一个用于扩展基本控制器的管理员。请详细说明如何解决此问题,但会话中存储变量的电子邮件地址不同,为什么?但会话中存储变量的电子邮件地址不同,为什么?是的,但是你在constract函数中检查会话,每次使用此控制器时,将你重定向到admin pagein admin panel我在constract函数中检查过,但在shop类中有许多其他函数可能不需要登录会话。那么,修复它的最佳解决方案是什么?这取决于你的代码设计,大多数情况下,所有的管理代码都在同一个控制器中,您需要重新设计代码,否则您应该为检查会话定义全局函数,并在每个函数的第一步使用它