Login Logout Register Menggunakan Session dengan PHP+MySQL


Disebagian forum diskusi dan grup facebook saya membaca banyak pertanyaan mengenai Login Logout Register menggunakan Session dengan password yang di enkripsi. Karena itu saya tertarik untuk menulis artikel tentang topik tersebut.


Berikut saya berikan contoh Code / Script untuk Login Logout dan Register.

Buat database baru, kemudian tambahkan table user.

user
CREATE TABLE IF NOT EXISTS `user` (
`id_user` int(11) NOT NULL,
  `nama` varchar(20) NOT NULL,
  `username` varchar(20) NOT NULL,
  `password` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

Buat file konfigurasi database dan session. Sesuaikan koneksi database dengan milik anda.

config.php
<?php
// memulai pencatatan session
session_start();

// koneksi database
mysql_connect('localhost','root','');
mysql_select_db('myreport');

// yang akan dijadikan session adalah id_user
if(isset($_SESSION['id_user'])) {
$id_user = $_SESSION['id_user'];
} else {
$id_user = 0;
}

?>
Perhatikan yang berwana merah, pada kode diatas saya akan menjadikan id_user sebagai session. Kenapa id_user yang dijadikan session? Karena id_user ini adalah primary key dari data user. Jika anda sudah menjadikan id_user sebagai session anda tidak perlu lagi menambahkan session lain, misal untuk session level (jika login multi-user).


Kemudian buat file register.php

register.php
<?php
// ambil konfigurasi database dan session
include('config.php');

// cek apakah user sudah login atau belum
// jika sudah login nilainya bukan 0 tetapi id_user
// direct ke halaman index.php
if($id_user<>0) { header('location:index.php'); }

// jika tombol register diklik
if(isset($_POST['btnregister'])) {
$txtnama = $_POST['txtnama'];
$txtuser = $_POST['txtuser'];
// password di enkripsi dengan password_hash()
$txtpass = password_hash($_POST['txtpass'],PASSWORD_BCRYPT);
$user = mysql_query("SELECT * FROM user WHERE username='$txtuser'");
// apakah username yang dimasukan sudah ada dalam database ?
$cekuser = mysql_num_rows($user);
if($cekuser>0) {
// jika sudah ada username yang sama maka register ditolak
echo "<script>alert('Username ini sudah terdaftar!');</script>";
} else {
// jika belum ada username yang sama maka register diterima
// kemudian masukan kedalam database
$insert = mysql_query("INSERT INTO user (nama,username,password) VALUES ('$txtnama','$txtuser','$txtpass')");
if($insert) {
echo "<script>alert('Daftar berhasil! Silahkan login.');</script>";
} else {
echo "<script>alert('Daftar gagal! Silahkan ulangi.');</script>";
}
}
}
echo "
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<body>
<h3>REGISTER</h3>
<form action='' method='post'>
<label>Nama</label><br/>
<input type='text' name='txtnama' required='true'/><br/>
<label>Username</label><br/>
<input type='text' name='txtuser' required='true'/><br/>
<label>Password</label><br/>
<input type='password' name='txtpass' required='true'/><br/>
<br/>
<button type='submit' name='btnregister'>Register</button><br/>
</form>
<br/>
<a href='login.php'>Login</a>
</body>
</html>
";
?>
Perhatikan yang berwarna merah, pada kode diatas saya menggunakan password_hash() untuk meng-enkripsi passwordnya. Saya sudah tidak menggunakan MD5 lagi untuk meng-enkripsi password karena beberapa alasan. 


Baca: MD5 itu Berbahaya, Titik!

Teknik pada register ini adalah meng-insert data kedalam database seperti anda menambahkan data lainnya. Hanya saja sebelum di insert anda harus meng-enkripsi password terlebih dahulu.


Setelah register, user diperbolehkan untuk login. Silahkan buat file login.php

login.php
<?php
// ambil konfigurasi database dan session
include('config.php');

// cek apakah user sudah login atau belum
// jika sudah login nilainya bukan 0 tetapi id_user
// direct ke halaman index.php
if($id_user<>0) { header('location:index.php'); }

// jika tombol login diklik
if(isset($_POST['btnlogin'])) {
$txtuser = $_POST['txtuser'];
$txtpass = $_POST['txtpass'];
$user = mysql_query("SELECT * FROM user WHERE username='$txtuser'");
// apakah username yang dimasukan sudah ada dalam database ?
$cekuser = mysql_num_rows($user);
if($cekuser==0) {
// jika username belum ada dalam database
echo "<script>alert('Anda belum terdaftar!');</script>";
} else {
// jika username sudah ada dalam database
$getuser = mysql_fetch_array($user);
// menyocokan password yang di input dengan password di database
if(!password_verify($txtpass,$getuser['password'])) {
// jika password tidak cocok
echo "<script>alert('Password salah!');</script>";
} else {
// jika password cocok
// id_user dijadikan session
$_SESSION['id_user'] = $getuser['id_user'];
// direct ke halaman index.php
header('location:index.php');
}
}
}
echo "
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h3>LOGIN</h3>
<form action='' method='post'>
<label>Username</label><br/>
<input type='text' name='txtuser' required='true'/><br/>
<label>Password</label><br/>
<input type='password' name='txtpass' required='true'/><br/>
<br/>
<button type='submit' name='btnlogin'>Login</button><br/>
</form>
<br/>
<a href='register.php'>Register</a>
</body>
</html>
";
?>
Perhatikan yang berwarna merah, fungsi password_verify() adalah untuk mencocokan password_hash() didalam database yang ter-enkripsi dengan password yang di input oleh user.
Yang berwarna biru itu menjadikan id_user sebagai session jika telah melewati beberapa kriteria.


Buat halaman index.php

index.php
<?php
// ambil konfigurasi database dan session
include('config.php');

// cek apakah user sudah login atau belum
// jika belum login nilainya adalah 0
// direct ke halaman login.php
if($id_user==0) { header('location:login.php'); }

// ambil data user sesuai id_user dari session
$user = mysql_fetch_array(mysql_query("SELECT * FROM user WHERE id_user='$id_user'"));

echo "
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h3>HOME</h3>
Anda login sebagai <b>$user[nama]</b> dengan username <b>$user[username]</b>.<br/>
<br/>
<a href='logout.php'>Logout</a>
</body>
</html>
";
?>
Pada kode diatas menampilkan nama dan username dari user yang telah login.


Buat file logout.php untuk menghapus session.

logout.php
<?php
// ambil konfigurasi database dan session
include('config.php');

// hapus session saat ini
unset($_SESSION['id_user']);

// direct ke halaman login.php
header('location:login.php');
?>
Yang berwarna merah adalah fungsi untuk menghapus session id_user tadi.


Untuk demo dan download script menyusul jika ada permintaan.
Silahkan berkomentar.
Terimakasih.





2 komentar
  1. Tutorial yang bagus bro. Kalau system login ini di terpakan ke dalam aplikasi crud bagaimana caranya? terima kasih

    BalasHapus