Friday 14 December 2012

Membuat Sistem Login Multi User Dengan Penggunaan Sessions Dalam PHP



Pada kesempatan kali ini saya akan mencoba kembali menulis tutorial mengenai PHP, dan kali ini yang akan kita bahas adalah bagaimana caranya membuat sistem login multi user dalam penggunaan SESSIONS yang tersimpan.

Mungkin masih ada yang bertanya, Apa itu Sessions...?
Pengertian menurut saya mengenai Sessions adalah informasi Website yang tersimpan di Server yang terkait dengan Browser yang kita gunakan, dan sessions ini banyak di gunakan dalam proses Login dan Logout pada Applikasi Website.



Lalu informasi seperti apakah yang tersimpan itu...? 
Tergantung dari si pembuat applikasi tersebut, informasi seperti apakah yang ingin di simpan nya, dan biasanya ini di gunakan untuk menyimpan informasi usernamekata sandi dan informasi-informasi lain yang di perlukanya untuk mengakses website tersebut.

Langsung menuju praktek nya...!
Dalam contoh ini saya akan membuat sebuah applikasi website yang memiliki 3 golongan user dengan hak akses yang berbeda untuk login ke website tersebut, dan satu di antaranya memiliki akses sebagai Admin website.

Mari kita buat sebuah database nya terlebih dahulu, misalkan bernama login_user

Setelah database baru bernama login_user di buat, kemudian buatlah  sebuah table pada database tersebut, misalkan bernama tab_user dan nama-nama kolom nya adalah user_idusernamepassword,user_nama, dan user_akses.

Silahkan gunakan phpMyAdmin untuk membuat nya, dan jangan lupa untuk kolom user_id gunakan sebagai INDEXS database dengan jenis PRIMARY, dan jenis kolom nya dibuat INT dengan penerapanAUTO_INCREMENT supaya nomor urut nya otomatis pada saat menambahkan user baru.

Untuk membedakan hak akses user...!
Pada kolom user_akses dibuat dengan type ENUM  dengan isian nilainya misalkan"gratis","premium","admin" hal ini dimaksudkan untuk membedakan hak akses user tersebut saat login ke website, dan nantinya akan kita simpan pada sessions. 

Jika masih bingung dengan pembuatan table database di atas, silahkan copy kan struktur table database di bawah ini, kemudian paste pada database bernama login_user yang telah anda buat pada phpMyAdmin.

Untuk phpMyAdmin dengan InnoDB:
--
-- Struktur dari tabel `tab_user`
--

CREATE TABLE IF NOT EXISTS `tab_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `user_nama` varchar(50) NOT NULL,
  `user_akses` enum('gratis','premium','admin') NOT NULL DEFAULT 'gratis',
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Untuk phpMyAdmin Dengan MyISAM:
--
-- Table structure for table `tab_user`
--
CREATE TABLE `tab_user` (
  `user_id` int(11) NOT NULL auto_increment,
  `username` varchar(50) collate latin1_general_ci NOT NULL,
  `password` varchar(50) collate latin1_general_ci NOT NULL,
  `user_nama` varchar(50) collate latin1_general_ci NOT NULL,
  `user_akses` enum('gratis','premium','admin') collate latin1_general_ci NOT NULL default 'gratis',
  PRIMARY KEY  (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1;

Kemudian setelah selesai membuat struktur database dan kolom-kolom nya, insert kan beberapa contoh user pada database tersebut, misalkan seperti contoh di bawah ini:

user_idusernamepassworduser_namauser_akses
1andi1234Andi Doanggratis
2toto1234Toto Kuncoropremium
3calim1234Calim Wehadmin
4widia1234Widia Yatingratis

Jika masih bingung untuk membuat contoh user nya, silahkan masukan 4 data user di bawah ini kepada struktur tabel tab_user yang telah di buat:


--
-- Dumping data untuk tabel `tab_user`
--

INSERT INTO `tab_user` (`user_id`, `username`, `password`, `user_nama`, `user_akses`) VALUES
(1, 'andi', '1234', 'Andi Doang', 'gratis'),
(2, 'toto', '1234', 'Toto Kuncoro', 'premium'),
(3, 'calim', '1234', 'Calim Weh', 'admin'),
(4, 'widia', '1234', 'Widia Yatin', 'gratis');

Sekarang kita saat nya membuat script php untuk table 'tab_user' yang telah di buat pada database tersebut, dimulai dari pertama user login menggunakan form login, dan proses penyimpanan sessions apabila user tersebut memiliki akses dan sudah ada pada database tersebut.

Untuk pembuatan applikasi nya, pertama-tama buatlah sebuah script PHP sebagai koneksi ke MYSQLterlebih dahulu, yang nantinya akan kita include kan ke script php untuk pemrosesan login user, kurang lebih seperti ini :

koneksi.php

<?php
$server = "localhost";
$username = "root";
$password = "passwordya";
$database = "login_user";

// Koneksi dan memilih database di server
mysql_connect($server,$username,$password) or die("Koneksi gagal");
mysql_select_db($database) or die("Database tidak bisa dibuka");
?>

Kemudian buat lah sebuah formulir untuk login user nya, misalkan pada form.php

<form name='login' action='proses.php' method='post'>
<table>
<tr>
<td>Username</td>
<td>:</td>
<td><input type='text' name='username' value='username' /></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input type='password' name='password' value='password' /></td>
</tr>
</table>
<input type='submit' name='submit' value="Login!" />
</form>   

Script form PHP di atas di include kan pada file index.php.
Apabila seorang user akan login dengan mengisi form pada form.php di atas, maka akan di proses oleh script proses.php seperti ini :

proses.php

 <?php
    include "koneksi.php";
    $username = $_POST['username'];
    $password = $_POST['password'];

    $login = mysql_query("SELECT * FROM tab_user WHERE username='$username' AND password='$password'");
    $hasil = mysql_num_rows($login);
    $r = mysql_fetch_array($login);

    if ($hasil > 0)
    {
      session_start();
      session_register("user_id");
      session_register("username");
      session_register("password");
      session_register("user_akses");
      $_SESSION[user_id]     = $r[user_id];
      $_SESSION[username]     = $r[username];
      $_SESSION[password]     = $r[password];
      $_SESSION[user_akses]    = $r[user_akses];
      header('location:index.php');
    }
    elseecho "LOGIN GAGAL! <br> <a href='index.php'><< Kembali</a>"; }
    ?>

Proses di atas, jika user terdapat pada database, maka akan menyimpan 4 sessions yaitu user_id,usernamepassword, dan user_akses. kemudian mengarah kanya kepada script index.php dan jika user tidak ada pada database, maka akan menghasil kan string LOGIN GAGAL!

Coba anda perhatikan SESSIONS yang di register pada script di atas, bahwa kolom user_nama tidak di register kan pada sessions, padahal kolom user_nama di buat pada database di atas...! Sengaja saya buat demikian, karena untuk pembuatan applikasi website tentunya memerlukan detail user yang lebih lengkap, seperti alamat user, email user, nomor hp dan sebagai nya, dan jika kita register kan semua pada sessions, maka proses exsekusi script akan menjadi tambah berat untuk loading data nya.

Untuk menghindari kekurangan di atas, maka di gunakan query_mysql untuk memproses pengambilan data-data yang lain pada database, seperti user_nama, dan data-data user lainya apabila ada dan di perlukan untuk applikasi tersebut, lihat pada script index.php.

index.php

<?php
session_start();
include "koneksi.php";
error_reporting(0);

if (empty($_SESSION['username']) AND empty($_SESSION['password'])){include"form.php";}
else{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login Multi User!</title>
</head>
<body>

<?php
$sql = mysql_query("SELECT * FROM tab_user WHERE user_id = '$_SESSION[user_id]'");
while ($data = mysql_fetch_array($sql))
{
 $user_nama = $data['user_nama'];
}
?>
<h2>Selamat Datang <?php echo "$user_nama"?>!</h2>
<?php
if ($_SESSION[user_akses] == "gratis") { echo "Kamu login sebagai user Gratis! <a href='logout.php' title='Keluar!'>Keluar</a>"; }
if ($_SESSION[user_akses] == "premium"){echo "Kamu login sebagai user Premium! <a href='logout.php' title='Keluar!'>Keluar</a>";}
if ($_SESSION[user_akses] == "admin"){echo "Kamu login sebagai user Admin! <a href='logout.php' title='Keluar!'>Keluar</a>";}
if ($_SESSION[user_akses] == ""){echo "Kamu tidak memiliki akses kesini!";}
?>

</body>
</html>
<?php } ?>

Untuk menghapus SESSIONS yang tersimpan gunakan fungsi perintah  session_destroy() Lihat pada script logout.php di bawah ini:

logout.php
<?php
  session_start();
  session_destroy();
  echo "<script>document.write('Kamu sudah keluar dari halaman member!'); window.location = 'index.php'</script>";
?>

No comments:

Post a Comment