CI_Session在登录时创建两个Session_id


CI_Session creating two session_id when logging in

我在尝试为朋友初始化代码点火器项目时遇到了一个奇怪的问题。

我有一个控制器user,它有两个功能:logindashboard

login功能:

function login()
{
    if ($this->user_model->isLoggedIn())
        redirect('user', 'refresh');
    else 
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Login', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        if (!$this->form_validation->run())
            $this->load->view('login');
        else 
        {
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $validCredentials = $this->user_model->validCredentials($username, $password);
            if ($validCredentials)
                redirect('user/dashboard', 'refresh');
            else 
            {
                $data['error_credentials'] = 'Wrong Username/Password';
            $this->load->view('login', $data);
            }
        }
    }
}

以及dashboard函数:

function dashboard()
{
    $data = array();
    $data['test'] = $this->session->all_userdata();
    if($this->user_model->isLoggedIn())
        $this->load->view('dashboard');
    else
        $this->load->view('sashboardnon', $data);
}

在登录视图中,有一个表单指向login函数,当我使用良好的凭据登录时,我会被重定向到sashboardnon视图,这不是我所期望的。

这是我的user_model.php:

class User_model extends CI_Model
{
    function User_model()
    {
        parent::__construct();
        $this->load->library('session');
    }
    function validCredentials($username, $password)
    {
        $this->load->library('encrypt');
        $password = $this->encrypt->sha1($password);
        $req = "SELECT username, password FROM users WHERE username = ? AND password = ?";
        $data = array($username, $password);
        $req = $this->db->query($req, $data);
        if ($req->num_rows() > 0)
        {
            $res = $req->result();
            $session_data = array(
                'username' => $res[0]->username,
                'logged_in' => TRUE,
            );
            $this->session->set_userdata($session_data);
            return true;
        }
        else
            return false;
    }
    function isLoggedIn()
    {
        if ($this->session->userdata('logged_in'))
            return true;
        else
            return false;
    }
    function logout()
    {
        $this->session->sess_destroy();
    }
}

当我查看数据库中的ci_sessions表时,当我单击登录按钮时,我看到有两个新条目。一个有我刚从user_model添加的用户数据,另一个没有

问题是,当创建数据库中的第二个条目时,用户数据中的值会被擦除。所以我无法登录。

有人知道这个问题可能来自哪里吗?

感谢

我认为上面的代码在逻辑上很不一致,你应该纠正它。你必须将逻辑从Model移到Controller。此外,将会话管理放在控制器中,并尝试仅将模型用于与数据库交互。

(1) 型号

class User_model extends CI_Model {
    function User_model()
    {
        parent::__construct();
    }
    function get($params) 
    {
        if(isset($params)) {
            $this->db->where("username", $params['username']);
            $this->db->where("password", $params['password']);
            $query = $this->db->get(users);
            if ($query->num_rows() > 0) {
               return $query->result();
            }
        }
        return false;  
    }
}

(2) 控制器

class Auth extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->model("users_model", "user");
    }
    function isLogdedIn() 
    {
        if ($this->session->userdata('logged_in')) {
            return true;
        }
        return false;
    }
    function login() 
    {
        if ($this->isLoggedIn()) {
            redirect('user', 'refresh');
        }
        else {
            // show login form and put the logic here
        }        
    }

    function logout()
    {
        $this->session->sess_destroy();
    }
    function validateCredentials($username, $password) 
    {
        $params = array('username' => $username, 'password' => $password);
        $result = $this->user->get($params);
        if($result !== false) {
             return true;
        }
        return false;
    {

}

我希望上面的例子能帮助您改进代码;)