1

很长一段时间以来,我一直是stackoverflow的狂热读者,现在轮到我提问了。

我遵循http://net.tutsplus.com/tutorials/php/easy-authentication-with-codeigniter/教程并设法让它为我自己完美地工作,但是我需要稍微扩展系统。在验证用户之后,我需要能够拉出经过身份验证的人的其他行字段并存储在会话变量中,以便在其他控制器中用于将信息发送回数据库。

例如,我想在会话变量 $f_name 中有一个,我需要他们的 $username。我高高在上,找到了答案,但他们只会让我感到困惑。

我的模型:

class admin_model extends CI_Model {
 function __construct( )
 {

 }

 public function verify_user($user_id, $password)
 {
 $q = $this->db->where('user_id', $user_id)
 ->where('password', sha1($password))->limit(1)->get('users');

 if ( $q->num_rows > 0   ){
     return $q->row();
 }
return false;

}

}

我的控制器:

class admin extends CI_Controller {

function __construct()
{
parent:: __construct();
session_start();


}

public function index()
{
    if ( isset($_SESSION['user_id'])){
        redirect('welcome');
    }
    $this->load->library('form_validation');
    $this->form_validation->set_rules('user_id', 'User ID', 'required|min_length[8]');
    $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]');

    if ($this->form_validation->run() !==false){
       $this->load->model('admin_model');
      $res = $this
          ->admin_model
          ->verify_user(
          $this->input->post('user_id'),
          $this->input->post('password')
      );
   if ($res !== false) {
    $_SESSION['user_id'] = $this->input->post('user_id');
    redirect ('welcome');
   }






    }

    $this->load->view('login_view');
}

public function logout(){

    session_destroy();
    redirect ('admin');
}
}

再次感谢大家,我期待您的回答\建议

4

1 回答 1

4

有几件事:
-需要的__construct()函数(或者该函数可以被删除,因为它是空的)来继承代码点火器模型构造函数。 - 代码点火器和 PHP 会话是不同的。您正在使用 PHP 会话,这意味着您必须在要访问会话数据的每个页面上发送任何输出之前调用。这也可以通过打开 session.autostart 为 php.ini 中的每个页面设置admin_modelparent::__construct
session_start()

如果您想使用代码点火器会话,请查看此处: http ://ellislab.com/codeigniter/user-guide/libraries/sessions.html

2012 年 12 月 21 日更新

尝试从返回的数据库行设置会话变量:

$_SESSION['f_name'] = $res->f_name;并且$_SESSION['username'] = $res->username;与您设置会话用户 id 变量的位置相同。我假设您的数据库字段正在映射到您要用于 f_name 和 username 字段的字段。

于 2012-12-19T22:32:04.857 回答