Codeigniter - 不通过控制器和视图工作的会话

时间:2015-07-17 01:18:12

标签: php codeigniter session

我正在尝试在用户名和密码匹配时使用codeigniter中的会话进行登录,但我无法得到它。我这样做:

控制器:

public function __construct()
    {
        parent::__construct();
        $this->load->model('main_select');
        $this->load->helper('url');
        $this->load->library('session');

    }

    ...code when username and password match:
if($pass === $user){
        $this->session->set_userdata(array(
                                    'user_id' => $login['id_user'],
                            ));//we create the session 'user_id'
}

这里假设我们创建了一个名为'user_id'的会话 在视图中它不起作用,我有这个:

if( !$this->session->userdata('id_user') ){
//see this content
//first content
}else{
//see this other
//second content
}

但我总是看到相同的内容('第二内容')。

试图摧毁它(但不起作用):

public function logout()
    {
        //session_unset(); 
        // destroy the session 
        //session_destroy();
        $this->session->unset_userdata('id_user');      

        header("Location: ".base_url() );
    }
我做错了什么?感谢

EDIT1:

$password = md5( $this->input->post('inputpassword') ); 
$login =  $this->login_select->get_username($username);

//si no coincide
if( $login['password'] !== $password ) {}

2 个答案:

答案 0 :(得分:0)

注意:始终使用数据库来处理用户登录。 (代码与数据库登录检查有关)

在您的数据库中使用user创建表格并添加此2个字段。

  1. 用户名
  2. 密码
  3. 添加一些用户登录

    然后在你的代码中

    public function __construct()
        {
            parent::__construct();
            $this->load->model('main_select');
            $this->load->helper('url');
            $this->load->library('session');
    
        }
    
    // logging
    public function loging()
    {
        $user = mysql_real_escape_string($_POST['username']);
        $pass = md5(mysql_real_escape_string($_POST['password']));
    
        $validate = $this->main_select->validate_user($user,$pass);
    
        if(empty($validate) || $validate>1)
        {
            //Not a valid user
            //redirect to login page
            $this->load->view('loging');
        }
        else
        {
            //valid user
            //set the session
    
            $array = array('user_id' => '$user');
            $this->session->set_userdata();
            //redirect to normal page
            $this->load->view('home_page');
        }
    }
    
    //logout
    public function logout()
    {
    
        $result= $this->session->sess_destroy(); 
    
        if ((isset($result))) 
        {
            header("Location: ".base_url() );
        }    
        else
        {
    
        }
    
    
    }
    

    在模型中

    public function validate_user($user,$pass)
    {
        $query = $this->db->query("SELECT * FROM user WHERE username= '$user' AND password='$pass'");
        $result = $query->result_array();
        $count = count($result);
        return $count;
    }
    

答案 1 :(得分:0)

修改这一行更改,然后您的脚本将工作,因为id_user需要首先设置在脚本中使用。

   if($pass === $login['password'] && $user===$login['username']){
              $this->session->set_userdata(array(
                                'id_user' => $login['id_user'],
                        ));//we create the session 'user_id'
  }

此处$login['password']$login['username']是来自表的数据,需要根据您的用户表更改fieldname pass或user。