Membuat login multi level sederhana dengan PHP

Your Ads Here

   Sebelumnya, saya sudah membuat tutorial tentang cara Membuat login multi level sederhana dengan Codeigniter 3 nah kali ini saya ingin membuat hampir sama seperti itu tapi dengan PHP murni. Saya juga akan menggunakan password yang sudah di enkripsi untuk login. Tentunya ini membuat projek kamu jadi lebih aman. Oke, langsung aja ke tutorialnya.

Database

Persiapkan database terlebih dahulu, sebagai contoh saya ingin menggunakan database db_login dari tabel tb_pengguna. Karena ini multi level, maka saya akan menggunakan 2 level yaitu Admin dan Staff. Di tb_pengguna saya membuat struktur seperti ini.
Silakan insert data di tb_pengguna sesuai keinginanmu. Untuk bagian password, harus di hash dulu dengan hash php. Gunakan PHP password_hash generator untuk membuat password. Atau, kamu bisa pakai punya saya untuk password iniadmin berikut adalah php hashnya :

$2y$10$eQtohKS.td8z6ETqxWbbUu.3KY0lZFQzzzfu6lsVjwrVZEIe7VF..
Tapi sebelumnya, pastikan projek kamu sudah terkoneksi dengan databasenya. Saya akan membuat file php dengan nama koneksi.php sebagai koneksi antara projek kita dengan databasenya.

<?php
$host   = "localhost";
$user   = "root";
$pass   = "rafipriatna";
$db     = "db_login";

$koneksi = new mysqli("$host", "$user", "$pass", "$db");
if (mysqli_connect_error())
  {
  echo "Waduh error gan :( </br> " . mysqli_connect_error();
  }
  error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
?>

Selanjutnya kita akan membuat file index.php yang nantinya akan menjadi halaman admin / halaman setelah login.

Halaman admin

Sebagai contoh saja, saya akan membuat halaman admin ini sangat sederhana. Hanya sebaris tulisan dan hyperlink untuk logout / keluar. Saya juga menambahkan session waktu agar pengguna yang login bisa otomatis ter-logout jika tidak melakukan aktifitas apapun selama waktu yang sudah ditentukan.

<?php
session_start();
include ('koneksi.php');
if (!isset($_SESSION['id'])) {
    header("location: masuk.php");
}else {
    
    if(isset($_SESSION['waktu']) && (time() - $_SESSION['waktu'] > $_SESSION['habis'] )) {
        echo 'Kamu diem aja selama 30 Menit, silahkan <a href="masuk.php">masuk</a> lagi.';
        session_destroy();
    }else {
// Tiap masuk ke halaman, akan selalu di refresh waktu nya.
// Jik pengguna diem aja sampai waktu habis, maka akan di matikan session nya.
$_SESSION['waktu'] = time();
?>
<h1>Selamat datang di halaman admin</h1>
<p>klik <a href="keluar.php">disini</a> untuk keluar</p>
<?php
   }
}
?>
Jika pengguna belum ada session login, maka akan langsung dialihkan ke halaman masuk.php. Cara tau pengguna sudah login atau belum dengan cara mendeteksi $_SESSION['id'] yang diambil dari file cek_masuk.php yang akan kita buat nanti.

Halaman masuk

Desain halaman masuk saya benar-benar sederhana, hanya form input saja karena ini hanya contoh. Tanpa CSS dan lain sebagainya. Tapi, kamu bisa membuat dengan desain kamu sendiri dengan css, javascript, atau gambar agar tampilan masuknya menjadi lebih cantik. Untuk halaman masuk saya seperti ini code nya, oh ya beri nama masuk.php ya.

<?php
session_start();
include ('koneksi.php');

if ($_SESSION['id']){
    header("location:index.php");
}else{
?>
<form method="POST" action="cek_masuk.php">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" name="masuk">
</form>
<?php } ?>
Lagi, saya memanfaatkan $_SESSION['id'] untuk mendeteksi apakah pengguna sudah login atau belum. Jika sudah, maka otomatis dialihkan ke file index.php. Sekarang, kita akan membuat file cek_masuk.php agar proses login dapat berjalan.

cek_masuk.php

Berikut adalah code dari cek_masuk.php

<?php
 include ('koneksi.php');
 if(isset($_POST['masuk'])){
  $username   = mysqli_real_escape_string($koneksi, trim($_POST['username']));
  $password   = mysqli_real_escape_string($koneksi, trim($_POST['password']));
  // Cek username dari database.
  $cek    = $koneksi->query("SELECT * FROM tb_pengguna WHERE (username = '".$username."')");
  $data    = $cek->num_rows;

  if($data  == 1){
   $row = $cek->fetch_assoc();
   // Meriksa password dari database.
   if(password_verify($password, $row['password'])){
    $id_pelogin    = $row['id'];
    $level_pelogin   = $row['level'];
    session_start();
    $_SESSION['id']   = $id_pelogin;
    $_SESSION['level']   = $level_pelogin;
    // Mengambil waktu last login.
    $setting       = new DateTime('NOW', new DateTimeZone('Asia/Jakarta'));
    $waktu     = $setting->format('Y-m-d g:i:s');
    $_SESSION['masuk']  = $waktu;
    // Diberi waktu 30 x 60 detik. ( 30 Menit ).
    $_SESSION['habis']   = 30 * 60;
   // Jika password cocok dengan yang di database.
   // Cek level.
   if($level_pelogin == 'Admin'){
     header('location:index.php');
    }elseif($level_pelogin == 'Staff'){
     header('location:staff.php');
     }
    }else{
            // Jika password dan username tidak cocok dengan yang di database.
    echo "<script type='text/javascript'>alert('Username atau password salah!'); window.location.href='../masuk.php';</script>";
    }
   // Jika username dan password tidak cocok dengan $data
   }
   }else{
            // Jika password dan username tidak cocok dengan yang di database.
                echo "<script type='text/javascript'>alert('Username atau password salah!'); window.location.href='../masuk.php';</script>";
        }
 
?>
Jika yang login levelnya adalah admin, maka akan dialihkan ke index.php. Jika staff, maka akan dialihkan ke staff.php. Jika ingin dialihkan ke folder ganti saja menjadi namafolder/namafile.php cukup mudah bukan?

Fungsi keluar

Sekarang, kita akan membuat file keluar.php untuk fungsi men-destroy / mematikan session yang ada. Caranya cukup mudah, silakan buat file keluar.php

<?php
session_start();
include ('koneksi.php');
session_destroy();
header( "location:masuk.php" );
?>
Jika pengguna klik keluar.php maka akan dialihkan ke masuk.php dan sessionnya dimatikan.

Sekian tutorial singkat ini, kamu bisa download hasil tutorial ini disini.
Your Ads Here

0 Comments

Silahkan bebas berkomentar disini. Jangan nyepam link aktif, dan harap gunakan kata yang sopan.
EmoticonEmoticon