我长期以来一直是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');
}
}
再次感谢大家,我期待着您的回答\建议
答案 0 :(得分:4)
有几件事:
- __construct()
中的admin_model
函数需要parent::__construct
(或者函数可以被删除,因为它是空的)来继承代码点火器模型构造函数。
- 代码点火器和PHP会话是不同的。您正在使用PHP会话,这意味着您必须在您要访问会话数据的每个页面上发送任何输出之前调用session_start()
。也可以通过启用session.autostart
如果您想使用代码点火器会话,请查看此处: http://ellislab.com/codeigniter/user-guide/libraries/sessions.html
尝试从返回的数据库行设置会话变量:
$_SESSION['f_name'] = $res->f_name;
和$_SESSION['username'] = $res->username;
与您设置会话用户ID变量的位置相同。我假设您的数据库字段映射到您要用于f_name和username字段的字段。