Sebuah autentifikasi sangat penting dan sangat dibutuhkan bagi suatu hal yang berhubungan dengan hak akses. Autentifikasi merupakan sesuatu yang sangat krusial, karena sekali autentifikasi tersebut di jebol atau dibobol maka dampaknya akan sangat berbahaya bagi suatu sistem. Pada kesempatan kali ini akan dijelaskan perlunya autentifikasi dalam suatu sistem, berserta cara membuatnya di PHP.
Sebelum berlanjut ke cara pembuatannya, perlu diketahui apa itu autentifikasi. Kalau bicara masalah autentifikasi, salah satu hal yang tidak bisa lepas dari ini adalah user atau pengguna. Jadi autentifikasi adalah proses validasi terhadap user, dimana username dan password dari user akan di cek apakah berhak memasuki sistem atau tidak. Salah satu implementasi dari autentifikasi ini adalah saat proses login ke sistem. User yang ingin mengakses sistem harus sudah tercatat terlebih dahulu di daftar user. Sehingga bila terdapat username dan password yang tidak terdaftar di daftar user, maka user tersebut tidak berhak mengakses sistem.
Saya akan menjelaskan alur dari autentifikasi, disini saya mengambil contoh saat login (login sederhana), dimana penjelasan ini akan dimulai dari user tersebut mendaftar sampai berhasil mengakses sistem.
Alur Pendaftaran User
- User mengisi form pendaftaran (username dan password)
- Sistem akan melakukan pengecekan apakah user tersebut sudah terdaftar atau belum
- Jika belum ada user yang terdaftar, data user akan disimpan di database. Sedangkan jika sudah ada, maka user akan diminta memasukkan ulang data dengan username berbeda berserta passwordnya.
- User yang ingin mengakses sistem akan diminta memasukkan username dan password
- Sistem akan melakukan pengecekan di database, apakah terdapat username dan password yang diinputkan user di dalam database
- Jika data user terdapat di database, maka user bisa masuk ke dalam sistem. Sedangkan jika tidak, maka user tidak berhak masuk ke sistem.
CREATE TABLE user ( username varchar (20), password varchar (32), PRIMARY KEY (username) )
Username digunakan sebagai Primary Key karena username harus unik, sehingga tidak boleh ada username yang sama. Sedangkan password panjang fieldnya diset 32 karena password yg diinputkan akan dienkripsi ke md5.
Buat script koneksi ke databasenya
koneksi.php
<?php
$hostdb ="localhost";
$usernamedb ="root";
$passworddb ="";
$database ="tutorial";
$koneksi = mysql_connect($hostdb, $usernamedb, $passworddb) or die("Kesalahan Koneksi");
mysql_select_db($database, $koneksi) or die ("Databasenya Error");
?>Silahkan diganti value $hostdb, $usernamedb, $passworddb, $database sesuaikan dengan database anda.Membuat form untuk pendaftaran
pendaftaran.php
<form method="post" action="act-pendaftaran.php">
<table border="0">
<tr>
<td>Masukkan Username </td>
<td><input name="username" type="text"></td>
</tr>
<tr>
<td>Masukkan Password </td>
<td><input name="password1" type="password"></td>
</tr>
<tr>
<td>Ulangi Password </td>
<td><input name="password2" type="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Daftar"></td>
</tr>
</table>
</form>
Pada form diatas diminta mengulangi password untuk memastikan kalau password yang dimasukkan benar dari sisi ejaan
Selanjutnya buat script untuk memproses pendaftaran tersebut
act-pendaftaran.php
<?php
$username = $_POST['username'];
$pass1 = $_POST['password1'];
$pass2 = $_POST['password2'];
//cek apakah pass1 == pass2
if($pass1 == $pass2)
{
//inkludkan koneksi database
include("koneksi.php");
//Menginkripsi password ke md5
$passenkrip = md5($pass1);
//Menyimpan data username dan password yang sudah terinkripsi ke database
$simpandata = mysql_query("INSERT INTO user (username, password) VALUES ('$username', '$passenkrip')");
if($simpandata) echo"Pendaftaran user berhasil";
else echo"Username '".$username."' sudah terdapat di sistem, Silahkan ulangi lagi!";
}
else echo"Password yang dimasukkan berbeda";
?>
Ini tampilan form pendaftaran berserta hasil dari proses pendaftaran
| Form Pendaftaran |
| Pendaftaran Berhasil |
| Pendaftaran gagal, username sudah terdapat di sistem |
| Pendaftaran gagal, password yang dimasukan berbeda |
Selanjutnya, sekarang kita skenariokan didalam sistem yang terautentikasi akan terdapat 2 buah link yang menuju ke halamannya masing-masing.
Proses autentikasi yang pertama, silahkan buat form loginnya
login.php
<form method="post" action="act-login.php">
<table border="0">
<tr>
<td>Masukkan Username </td>
<td><input name="username" type="text"></td>
</tr>
<tr>
<td>Masukkan Password </td>
<td><input name="password" type="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</form>
Kemudian selanjutnya buat script untuk memproses login
act-login.php
<?php
//memulai session
session_start();
//Meninkludkan koneksi ke database
include("koneksi.php");
$userlogin = $_POST['username'];
$passlogin = $_POST['password'];
$passhash = md5($passlogin);
//Mencari username dan password terenkripsi md5
$perintah = "SELECT * FROM user WHERE username = '$userlogin' AND password = '$passhash'";
$jalankan = mysql_query($perintah);
//cek ketersediaan data
$ketersediaan = mysql_fetch_array($jalankan);
if ($ketersediaan >= 1)
{
//jika ada, buat session untuk username
$_SESSION['username'] = $userlogin;
//menampilkan pesan dan menu
echo"<h2>Login Berhasil</h2>";
echo "<p><a href=\"hal1.php\">Menu 1</a> | <a href=\"hal2.php\">Menu 2</a> | <a href=\"logout.php\">Logout</a></p>";
}
else echo"<h2>Login Gagal, Periksa Kembali Inputan</h2>";
?>
Lihat dibagian cek ketersediaan, jika nilainya 1 atau bisa dikatan terdapat data di row dalam tabel user berdasarkan usernam dan password yang diinputkan maka akan dibuatkan session untuk username beserta ditampilkan menu-menu yang terdapat di dalamnya.
Berikut tampilan login berserta hasil proses loginnya
| Login Berhasil |
| Login Gagal |
Selanjutnya untuk mencegah baypas terhadap menu-menu yang terdapat di dalam sistem, maka dibuatkan script untuk mengecek apakah user sudah melakukan login atau belum dengan mengecek session usernamenya.
cek.php<?php
//memulai session
session_start();
// mengecek ada tidaknya session untuk username
if (!isset($_SESSION['username']))
{
echo "<h1>Anda belum login</h1>";
exit;
}
?>
Script cek.php harus diinkludkan disetiap halaman yang membutuhkan autentikasi. Dimana didalam sekenario ini adalah menu-menu yang terdapat di sistem.
Contoh implementasinya di dalam menu-menu
hal1.php
<?php include "cek.php"; echo "<h1>Ini Halaman 1</h1>"; echo "<p><a href=\"hal1.php\">Menu 1</a> | <a href=\"hal2.php\">Menu 2</a> | <a href=\"logout.php\">Logout</a></p>"; echo "<p>Ini isi halaman 1. Ini isi halaman 1</p>"; ?>
hal2.php
<?php include "cek.php"; echo "<h1>Ini Halaman 2</h1>"; echo "<p><a href=\"hal1.php\">Menu 1</a> | <a href=\"hal2.php\">Menu 2</a> | <a href=\"logout.php\">Logout</a></p>"; echo "<p>Ini isi halaman 2. Ini isi halaman 2</p>"; ?>
Coba perhatikan kedua contoh script halaman tersebut, file cek.php selalu di inkludkan disana dan harus diinkludkan paling awal atau sebelum isi dari halaman.
Barikut tampilan masing-masing menu ketika dibuka melalui login dan tanpa login
| Halaman 1 diakses melalui login |
| Halaman 2 diakses melalui login |
| Ketika menu diakses tanpa melalui login |
Dan terakhir buat script logout, untuk menghapus session yang sudah dibuat
logout.php
<?php
//memulai session
session_start();
// menghapus session username
if (isset($_SESSION['username']))
{
unset($_SESSION['username']);
}
echo "<h1>Anda sudah logout</h1>";
?>
Dalam script tersebut digunakan unset untuk menghapus session username yang sudah dibuat tadi saat login berhasil
Tampilan ketika Logout berhasil
| Logout Berhasil |
Tidak terasa ternyata sudah menulis sepanjang ini.. Bagaimana? Sudah mengerti cara membuat autentikasi di PHP? Silahkan tuangkan dalam komentar :D

0 komentar:
Post a Comment
Berkomentarlah dengan bijak dan sopan. Tidak diperbolehkan menggunakan kata-kata yang mengandung SARA. Komentar akan melalui moderation terlebih dahulu, jika terdapat kata-kata yang tidak sesuai ketentuan, maka komenar tidak dapat ditampilkan. Mari Saling berkomentar dengan baik :)