/ / Codeigniter / Comment (0)

Codeigniter Framework : Chức năng đăng nhập – đăng xuất

Với bài hướng dẫn trước mình đã hướng dẫn cho các bạn tạo ra chức năng đăng ký thành viên,tiếp tục trong bài này mình sẽ hướng dẫn các bạn tạo chức năng thành viên đăng nhập sử dụng thư viện session trong CodeIgniter,để làm chức năng này dễ hơn mình khuyên các bạn lên đọc lại các bài liên qua sau:

  1. Hướng dẫn tạo cơ sở dữ liệu (CSDL) cho web bán hàng (xem các trường dữ liệu của bảng user)
  2. Xây dựng main controller CodeIgniter (controller user sẽ kế thừa từ lớp main controller này)
  3. Xây dựng main Model CodeIgniter (model user sẽ kế thừa từ lớp main model này)
  4. Form Validatiton trong CodeIgniter (thực hiện kiểm tra dữ liệu trong form )

Nếu các bạn theo dõi loại series hướng dẫn xây dựng website bán hàng thanh toán trực tuyến thì cần chú ý,toàn bộ các bài viết trong series này mình đều sử dụng CSDL như ở trong bài viết hướng dẫn tạo CSDL đơn giản cho website bán bàng,và sử dụng các lớp main controllermain model như trong bài hướng dẫn ở trên.Lên các bạn cần nắm kỹ các bài trên nhé

Chức năng thành viên đăng nhập với Codeigniter Framework

Trước khi vào thực hành làm chức năng này mình xin giới thiệu về cấu trúc thư mục dự án của mình như sau:

-demo
—–application
———-controllers
—————–user.php
———-models
—————–user_model.php
———-views
—————–admin
—————–site
—————————user
————————————register.php
————————————login.php

Tạo form đăng nhập

Trước tiên các bạn tạo cho mình file views/site/user/login.php với nội dung sau:

            <form class="t-form form_action" method="post" action="" name="login" >
                  
                  <div class="form-row">
                        <label for="param_email" class="form-label">Email:<span class="req">*</span></label>
                        <div class="form-item">
                            <input type="text" class="input" id="login_email" name="email" value="<?php echo set_value('email')?>">
                            <div class="clear"></div>
                            <div class="error" id="login_email_error"><?php echo form_error('email')?></div>
                        </div>
                        <div class="clear"></div>
                  </div>
                  <div class="form-row">
                        <label for="param_password" class="form-label">Mật khẩu:<span class="req">*</span></label>
                        <div class="form-item">
                            <input type="password" class="input" id="login_password" name="password">
                            <div class="clear"></div>
                            <div class="error" id="login_password_error"><?php echo form_error('password')?></div>
                        </div>
                        <div class="clear"></div>
                  </div>
                  <div class="form-row">
                        <label class="form-label">&nbsp;</label>
                        <div class="form-item">
                            <div class="error" id="login_error"><?php echo form_error('login')?></div>
                               <input type="submit" class="button"  name='login' value="Đăng nhập" >
                        </div>
                   </div>
            </form>

Nhìn vào form trên thì các bạn thấy mình có 2 trường dữ liệu đó chính là email,mật khẩu,2 trường dữ liệu ta cần quản lý trong bảng thành viên.Nếu các bạn đã xem bài viết về Form Validatiton trong CodeIgniter thì các bạn sẽ hiểu những dòng code của mình trong form trên:
+ set_value('email') : Lưu lại giá trị cũ khi khách hàng nhập vào ô email,tương tự các ô kia cũng vậy
+ form_error('email') : Hiển thị lỗi của ô email nếu có,tương tự các ô kia cũng vậy

Và khi các bạn chạy link http://localhost/demo/user/login kết quả sẽ như sau:

Form login

Form login

Và tất nhiên là form trên mình đã sử dụng cả css để style cho form rồi nhé,phần này không quan trọng lên các bạn có thể style cho form đẹp hơn hoặc không style cũng được :D.

Tạo Model (user_model.php)

<?php
class User_model extends MY_Model
{
    //ten bang du lieu
    public $table = 'user';
    
    //ten bang du lieu
    public function check_login($email, $password)
    {
        //them dieu kien kiem tra email va password
        $where = array('email' => $email, 'password' => $password);
        $this->db->where($where);
        //thuc hien cau truy van
        $query = $this->db->get($this->table);
        if($query->num_rows() > 0)
        {
            return true;
        }
        return false;
    }
    
    /*
     * lay thong tin thanh vien
     */
    public function get_user_info($where = array())
    {
        //tao dieu kien cho cau truy van
        $this->db->where($where);
        $result = $this->db->get('user');
        return $result->row();
    }
}

Vơi phần này nếu các bạn đã đọc bài viết Xây dựng main Model CodeIgniter thì sẽ thấy model user mình kế thừa từ lớp MY_Model mà không phải là từ CI_Model,từ đó ta có thể sử dụng được toàn bộ phương thức trong lớp này.

Kiểm tra dữ liệu trong form

– Các bạn tạo file controller user.php với nội dung:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');  
class User extends MY_Controller
{
    public function __construct()
    {
       parent::__construct();
       //load model user
       $this->load->model('user_model');
    }

    /*
    * Kiem tra dang nhap
    */
    public function check_login()
    {
        //lay du lieu tu form
        $email    = $this->input->post('email');
        $password = $this->input->post('password');
        $password = md5($password);
        $where = array('email' => $email, 'password' => $password);
        if(!$this->user_model->check_exists($where))
        {
             //trả về thông báo lỗi nếu đã tồn tại email này
            $this->form_validation->set_message(__FUNCTION__, 'Đăng nhập không thành công');
            return FALSE;
        }
        return true;
    }
    
    /*
    * Phuong thuc dang nhap
    */
    public function login()
    {
       //load thu vien validation
       $this->load->library('form_validation');
       $this->load->helper('form');
       
        //tao cac tap luat
       $this->form_validation->set_rules('email', 'Email', 'required|valid_email|xss_clean');
       $this->form_validation->set_rules('password', 'Mật khẩu', 'required|xss_clean');
       $this->form_validation->set_rules('login', 'Đăng nhập', 'callback_check_login');
       
       if($this->form_validation->run())
       {
            //lay du lieu tu form post sang
            $email    = $this->input->post('email');
            $password = $this->input->post('password');
            $password = md5($password);
            $where = array('email' => $email, 'password' => $password);
            //lay thong tin thanh vien
            $user = $this->user_model->get_info_rule($where);
            
            //luu thong tin thanh vien vao session
            $this->session->set_userdata('login', $user);
            //tạo thông báo
            $this->session->set_flashdata('flash_message', 'Đăng nhập thành công');
            redirect();//chuyen toi trang chu
       }
       
       //gui du lieu sang view
       $this->data['temp'] = 'site/user/login';
       $this->load->view('site/layout', $this->data);
    }
}

– Với chức năng này các bạn cần quan tâm tới phần

$this->form_validation->set_rules('login', 'Đăng nhập', 'callback_check_login');     

đây chính là điều kiện kiểm tra thông tin đăng nhập thông qua hàm callback check_login,và chức năng của hàm này chỉ là kiểm tra email và password nhập vào có tồn tại trong csdl hay không,nó cũng đồng nghĩa với việc có đăng nhập thành công hay không.Và sau khi đã đăng nhập thành công chúng ta sẽ lưu thông tin thành viên bằng cách sử dụng thư viện session,và dữ liệu đó được lưu qua biến login
– Như vậy khi chúng ta kiểm tra thành viên đã đăng nhập hay chưa chỉ cần kiểm tra xem có tồn tại biến session login hay không,ví dụ:

	/*
	 * Kiểm tra đã đăng nhập hay chưa
	*/
	private function _user_is_login()
	{
		$user_data = $this->session->userdata('login');
		//neu chua login
		if(!$user_data)
		{
			return false;
		}
		return true;
	}

Xây dựng chức năng đăng xuất

– Như phần trên chúng ta dựa vào biến sessionn login để kiểm tra thành viên đã đăng nhập hay chưa,vì vậy khi thành viên muốn đăng xuất chúng ta chỉ việc xóa biến session login đi,và trong controller chúng ta sẽ xây dựng phương thức logout với nội dung sau:

    /*
    * Phuong thuc dang xuat
    */
    public function logout()
    {
        if($this->_user_is_login())
        {
           //neu thanh vien da dang nhap thi xoa session login
           $this->session->unset_userdata('login');
        }
        $this->session->set_flashdata('flash_message', 'Đăng xuất thành công');
        redirect();
    }

Tổng kết: Như vậy các bạn thấy quy trình đăng nhập và đăng xuất thật đơn giản phải không nào,thực chất nó chỉ kiểm tra thông tin thành viên sau đó sử dụng session để lưu trạng thái cho biết đã đăng nhập hay chưa,sau đó muốn đăng xuất chỉ cần xóa session đi là được.Đây là chức năng cơ bản và rất đơn giản nhưng cũng rất quan trọng,mong rằng bài viết sẽ giúp cho các bạn mới tìm hiểu về Codeigniter có thể tự xây dựng chức năng này cho riêng mình.Các bạn có thể tải controller user và model user tại đây http://ouo.io/5gW72A



06/05/2015
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL