Session CodeIgniter (Form Login)


Tutorial ini adalah kelanjutan dari tutorial sebelumnya sampai pada pembuatan CRUD yang dibahasa dalam materi Konfigurasi, Model, View dan Controller yang bisa di download di sini. Dowload dulu projeknya ya, untuk kita lanjutkan. Sekarang kita akan mempelajari session dengan contoh kasus yang umum yaitu form login.

Buat tabel tbl_user pada database crud_db.
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tbl_user
-- ----------------------------
CREATE TABLE `tbl_user` (
  `id_user` varchar(255) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `tbl_user` VALUES ('2', 'admin@gmail.com', '40bd001563085fc35165329ea1ff5c5ecbdbbeef');
INSERT INTO `tbl_user` VALUES ('3', 'a@gmail.com', '40bd001563085fc35165329ea1ff5c5ecbdbbeef');


Setelah selesai membuat tabel berikut daftar yang akan kita buat:
  1. Form Login dan Menu User
  2. Home
Kita Mulai dari pembuatan form login.
  • belajarcodeigniter
    • view
      • user
        • login.php
<!--Nama file: login.php-->
<!DOCTYPE html>
<html>
<?php $this->load->view('_includes/head_form'); ?>
<body class="hold-transition login-page">
<div class="login-box">
  <div class="login-logo">
    <a href="../../index2.html"><b>LOGIN</b></a>
  </div>
  <!-- /.login-logo -->
  <div class="card">
    <div class="card-body login-card-body">
      <p class="login-box-msg">Sign in to start your session</p>

      <form action="<?php echo site_url('user/aksi_login'); ?>" method="post">
        <div class="input-group mb-3">
          <input type="email" class="form-control" placeholder="Email" name="email">
          <div class="input-group-append">
            <div class="input-group-text">
              <span class="fas fa-envelope"></span>
            </div>
          </div>
        </div>
        <div class="input-group mb-3">
          <input type="password" class="form-control" placeholder="Password" name="password">
          <div class="input-group-append">
            <div class="input-group-text">
              <span class="fas fa-lock"></span>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-8">
            <!--div class="icheck-primary">
              <input type="checkbox" id="remember">
              <label for="remember">
                Remember Me
              </label>
            </div-->
          </div>
          <!-- /.col -->
          <div class="col-4">
            <button type="submit" class="btn btn-primary btn-block">Sign In</button>
          </div>
          <!-- /.col -->
        </div>
      </form>

      <!--div class="social-auth-links text-center mb-3">
        <p>- OR -</p>
        <a href="#" class="btn btn-block btn-primary">
          <i class="fab fa-facebook mr-2"></i> Sign in using Facebook
        </a>
        <a href="#" class="btn btn-block btn-danger">
          <i class="fab fa-google-plus mr-2"></i> Sign in using Google+
        </a>
      </div-->
      <!-- /.social-auth-links -->
      <!--
      <p class="mb-1">
        <a href="forgot-password.html">I forgot my password</a>
      </p>
      <p class="mb-0">
        <a href="register.html" class="text-center">Register a new membership</a>
      </p> -->
    </div>
    <!-- /.login-card-body -->
  </div>
</div>
<!-- /.login-box -->

<!-- jQuery -->
<?php $this->load->view('_includes/js_form'); ?>
</body>
</html>


Selanjutnya kita buat controller user untuk menangani login, logout dan data user sendiri.
  • belajarcodeigniter
    • application
      • controllers
        • User.php
<?php
//nama file: User.php
defined('BASEPATH') OR exit('No direct script access allowed');

class User extends CI_Controller {

   function __construct()
        {
        parent::__construct();
        $this->load->model('User_model');
        }

   public function login() {
        $this->load->view('user/login');
       }

    public function aksi_login(){
        $email = $this->input->post('email');
        $password = $this->input->post('password');
        //echo "$email"."<br />";
        //echo sha1($password)."<br />";
        $where = array(
            'email' => $email,
            'password' => sha1($password)
            );
        $cek = $this->User_model->cek_login($where)->num_rows();
        if($cek > 0){
 
            $data_session = array(
                'email' => $email,
                'status' => "login"
                );
 
            $this->session->set_userdata($data_session);
            
            redirect(site_url('home'));
        }
        redirect(site_url('user/login'));
    }

    public function data(){
        is_login();
        $user = $this->User_model->get_all();

        $data = array(
            'data' => $user
        );
        $this->load->view('user/user_list',$data);
    }

    public function tambah(){
            is_login();
            $data = array(
                'judul' => 'Form Tambah User',
                'button' => 'Simpan',
                'action' => site_url('user/aksi_tambah'),
            'id_user' => set_value('id_user'),
            'email' => set_value('email'),
            'password' => set_value('password'),
           );
            $this->load->view('user/user_form', $data);
    }

    public function aksi_tambah(){
        is_login();
        $data = array(
            'id_user' => $this->input->post('id_user',TRUE),
            'email' => $this->input->post('email',TRUE),
            'password' => sha1($this->input->post('password',TRUE)),
        );
        $this->User_model->insert($data);
        $this->session->set_flashdata('message','Tambah Berhasil');
        redirect(site_url('user/tambah'));

    }

    public function edit($id){
        is_login();
        $row = $this->User_model->get_by_id($id);
        $data = array(
            'judul' => 'Form Edit User',
            'button' => 'Ubah',
            'action' => site_url('user/aksi_edit'),
            'id_user' => set_value('id_user',$row->id_user),
            'email' => set_value('email',$row->email),
            'password' => set_value('password'),
           );
            $this->load->view('user/user_form', $data);
    }

    public function aksi_edit(){
        is_login();
        $cek_pass=$this->input->post('password',TRUE);
        if (!empty($cek_pass)) {
            $data = array(
                    'id_user' => $this->input->post('id_user',TRUE),
                    'email' => $this->input->post('email',TRUE),
                    'password' => sha1($this->input->post('password',TRUE)),
            );
        }else{
            $data = array(
                    'id_user' => $this->input->post('id_user',TRUE),
                    'email' => $this->input->post('email',TRUE),                    
            );
        }
        
       $this->User_model->update($this->input->post('id_user', TRUE), $data);
       $this->session->set_flashdata('message','Edit Berhasil');
        redirect(site_url('user/edit/'.$this->input->post('id_user',TRUE)));
    }

    public function hapus($id){
        is_login();
        $this->User_model->delete($id);
        $this->session->set_flashdata('message','Hapus Berhasil');
        redirect(site_url('user/data'));
    }

    function logout(){
        $this->session->sess_destroy();
        redirect(base_url('user/login'));
    }
}


Ada beberapa method pada controller user yaitu:
  1. login
    untuk menangani login dan membuat session.
  2. logout
    untuk menghapus session.
  3. data
    menampilkan data user.
  4. tambah
    menyiapkan form tambah data.
  5. aksi_tambah
    menangani tambah data. Password di enkripsi dengan algoritma sha1.
  6. edit
    menyiapkan form edit.
  7. aksi_edit
    menangani edit data.
  8. hapus
    menangani hapus data.
Adapun model yang digunakan sebagai berikut.
  • belajarcodeigniter
    • application
      • models
        • User_model.php
Selanjutnya buat model untuk user bernama User_model.php
<?php
//nama file: User_mode.php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class User_model extends CI_Model
{
public $table = 'tbl_user';
    public $id = 'id_user';
    public $order = 'DESC';

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

    // fungsi mengecek apakah data ada untuk username dan password yang di input user
    function cek_login($where){
       return $this->db->get_where($this->table,$where);
    }

    function get_all()
    {
        $this->db->order_by($this->id, $this->order);
        return $this->db->get($this->table)->result();
    }

    // fungsi untuk menampilkan data berdasarkan primary
    function get_by_id($id)
    {
        $this->db->where($this->id, $id);
        return $this->db->get($this->table)->row();
    }

    // insert data
    function insert($data)
    {
        $this->db->insert($this->table, $data);
    }

    // update data
    function update($id, $data)
    {
        $this->db->where($this->id, $id);
        $this->db->update($this->table, $data);
    }

    // delete data
    function delete($id)
    {
        $this->db->where($this->id, $id);
        $this->db->delete($this->table);
    }
}

Pada tutorial kali ini saya menggabungkan controller login dengan manajemen user dan medel yang digunakan adalah User_model.php. Kita akan bahas mengenai session dimana kode membuat session, mengecek sesssion dan penghapusan session.

#membuat session
Fungsi cek_login pada model digunakan untuk mencari data berdasarkan usename dan password pada tabel tbl_user. Jika username dan password yang dihashkan  (sha1) sama, maka pembuatan session dilakukan. Berikut ini kode inti membuat session dari controller user.

$data_session = array(
                'email' => $email,
                'status' => "login"
                );
 $this->session->set_userdata($data_session);

Terlihat fungsi session yang digunakan adalah set_userdata();

#mengecek session
Pengecekan session biasanya dilakukan hampir disemua halaman sehingga kita menempatkan cek session di helper yang di-aoutoload-kan.
  • belajarcodeigniter
    • application
      • helpers
        • cek_login_helper.php
<?php
//nama file: cek_login_helper.php
function is_login() {
$CI =& get_instance();
if($CI->session->userdata('status') != "login"){
redirect(site_url("user/login"));
}
}

Selanjutnya daftarkan helper ini pada autoload.
  • belajarcodeigniter
    • application
      • config
        • autoload.php

$autoload['helper'] = array('url','form','cek_login_helper');

Kemudian pada method construct semua controller (Home, Mahasiswa, dll) helper ini dipanggil, fungsinya jika belum login  maka akan ditampilkan halaman login.

//file controller
function __construct()
    {
        parent::__construct();
        is_login();
    }

#menghapus session
Kode inti menghapus session pada method logout adalah.
$this->session->sess_destroy();

Untuk menu management user dan home terlalu panjang untuk dibahas disini. Saya akan paparkan file-file yang sudah dibuat pada tutorial kali ini dan nanti projeknya bisa di download.
  • berlajarcodeigniter
    • application
      • controllers
        • Home.php
        • User.php (sudah)
      • helpers
        • cek_login_helper.php (sudah)
      • model
        • User_model.php (sudah)
      • view
        • _includes
          • head_home.php
          • js_home.php
          • dll
        • home
          • home.php
        • user
          • login.php (sudah)
          • user_list.php
          • user_form.php
Download projeknya di sini .

Popular posts from this blog

Cara Menggunakan Template Admin LTE Sebagai Template Web Dinamis

Aplikasi CRUD menggunakan Template Admin LTE

Cara membuat Link ke Halaman lain dan Link ke bagian Halaman