Membuat Form Login Untuk Membatasi Hak Akses Dengan Session PHP

814

Sebuah variabel session di PHP digunakan untuk menyimpan informasi user di dalam server. Variabel session dapat di panggil atau di tampilkan di seluruh halaman web. Berikut adalah beberapa fungsi yang akan berkaitan dengan session:

  1. session_start(), ditulis dibagian awal skrip agar data sesi yang ada di bawahnya dapat di kenali.
  2. $_SESSION[], berfungsi untuk menyimpan atau menampilkan data sesi.
  3. isset() atau session_is_registered(), digunakan untuk mengecek apakah data sesi sudah di set atau belum.
  4. session_register(), berfungsi untuk men-set data sesi.
  5. session_destroy() atau unset($_SESSION[]), berfungsi untuk menghapus data sesi.

Contoh berikut merupakan kelanjutan dari Koneksi dan Manipulasi Data mySQL Database yang di modifikasi bahwa tidak setiap orang berhak mengakses halaman tersebut melainkan hanya user tertentu (memiliki username dan password). Table users dalam database database_ku harus diisi minimal dengan satu orang data user terlebih dahulu sebelum uraian program di bawah di terapkan.

Untuk mengecek data sesi, skrip berikut  harus di tempatkan dibagian awal tiap halaman web/setiap file.

<?php

session_start();

//cek user logged in

if(!isset($_SESSION[‘username’]) and !isset($_SESSION[‘password’])){

header(‘location:login.php’); //ke halaman login

}

?>

Jika data sesi belum di set, program akan di arahkan ke halaman login untuk men-set data sesi (username dan password) terlebih dahulu:

form-login

Berikut adalah contoh  skrip untuk menge-cek user yang login/ketika user menekan tombol Login:

<?php

//cek username dan password user dalam table users database

$username =$_POST[‘username’];

$password =md5($_POST[‘password’]);

$query =mysql_query(“SELECT * FROM users WHERE username=’$username’ AND password=’$password'”);

$data_user =mysql_fetch_array($query);

if($data_user[‘username’] == $username and $data_user[‘password’] == $password){

//men-set data sesi username dan password

session_register(‘username’,’password’);

header(‘location:index.php’);

}else {

//penanganan error

$error =””;

if(empty($username) and empty($_POST[‘password’])){

$error =”<b>Username</b> dan <b>Password</b> kosong”;

}else if(empty($username)){

$error =”<b>Username</b> kosong”;

}else if(empty($_POST[‘password’])){

$error =”<b>Password</b> kosong”;

}else{

$error =”<b>Username</b> dan <b>Password</b> tidak sesuai”;

}

echo “<h3>Login Gagal:</h3><p>$error. <br /><a href=’login.php’>Kembali</a><p>”;

}

?>

Jika user berhasil login (memasukan username dan password dengan tepat) data sesi akan di set dan user bersangkutan berhak masuk ke halaman users yang akan tampak seperti ini.

Fungsi session_destroy() dipanggil ketika user bersangkutan memilih link/button logout yang kemudian program akan diarahkan kembali ke halaman login:

<?php

//menghapus data sesi

session_destroy();

?>

Skrip selengkapnya dapat anda download disini.

–Selamat Mencoba–

  • saktivan

    artikelnya sangat membantu . . 🙂

  • ucing

    thanks banget mas tutor nya 🙂

  • chamey

    kok saya coba tidak berhasil yaaaa….

    pas mau login tidak bisa.padahal sudah disesuaikan dengan data tersebut.kami sudah membuat table users seperti yg diatas.
    mengapa tidak bisa LOGIN ??

    • Ada pesan tulisan error nya ga?….

  • abang

    database nya blm ada …

  • saya ket
    “Login Gagal:

    Username dan Password tidak sesuai.
    Kembali”,

    padahal nama n pass sdh sesuai dgn db,gmntuh>>

  • login gagal, mungkin disebabkan username dan password belum tersedia di tabel users. Coba perintah SQL berikut di phpmyadmin->yourdatabase->SQL:

    INSERT INTO users(username,password)
    VALUES (‘your-username’,MD5( ‘your-password’ ))

    kemudian klik,,,GO…coba login kembali dengan username=your-username dan password=your-password….

  • thx gan

  • terima kasih atas ilmunya 😉

  • djaun

    maap tanya gan ..
    uda sy insert pke “INSERT INTO users(username,password) VALUES (‘your-username’,MD5( ‘your-password’ ))” tp ttp ada ket username dan pasword tidak sesuai. tolong bantu gan .. calo bisa tolong script databasenya

    • @djaun. Coba cek di http://localhost/phpmyadmin/ -> database_ku ->tabel users, ‘your-username’ di field username masuk ga?..hati2 penulisan password saat login ‘case sensitive’, penulisan karakter ‘A’ dan ‘a’ dianggap berbeda…

  • djaun

    data yg d insert udh masuk gan tp ttp ada tulisan username dan pasword tdk sesuai .. capslock jg g aktif kok …

  • fauzi

    tetep gx tampil db=> username ama password di browser, padahal di db mysql ada datanya…..
    mohon pencerahannya gan..

    • Pesan Error nya apa?….udah di cek pake skrip modifikasi comments #13….

  • Terima Kasih mas, sangat membantu sekali buat saya yg sedang mengerjakan TA. Terima Kasih banyak.

    • coba ilangin md5
      di bagian login-logout
      $password =md5($_POST[‘password’]);
      saya berhasil dengan cara itu

  • zifank

    sy prnh bc entry ini d site lain,.. tertarik, sy coba… kira2 kl sy pk databaseny d oracle bs g y sy invert script ini?? nuhun…

    • Skrip di atas hanya dapat dipake buat database mySQL…kecuali mungkin kalo sintak seperti mysql_fetch_array dan sebagainya diganti buat skrip oracle menjadi ora_fetch_into() kayaknya bisa….maaf ada unsur kayak-nya soal-nya belum pernah coba pake php-oracle….

  • Numpan tanya mas, bagaimana bisa membuat 2 login yaitu login user dan login admin supaya daya yang di imput hanya bisa di di update oleh admin saja ……….tolong yang mas.

  • reza

    mas mau nanya
    ada error seperti ini
    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\Belajar\Login\login.php:9) in C:\xampp\htdocs\Belajar\Login\login.php on line 11

    kenapa ya kira2 ?

    • Coba cek penulisan skrip, kayaknya ada penulisan ‘spasi’ diluar < ?php ... ?>..mohon maaf balas nya sangat2 lambat sekali, tapi mudah2an bisa membantu bagi yang lain, karena kejadian ini sering terjadi ketika kita me-redirect ke halaman/page lain

  • mas,, sesion ketika udah masuk gmn ya??
    waktu saya masukkan

    percuma aja,, waktu logout tetep aja masih bisa masuk,, ada solusi mas?,, maklum saya masih nubi

    • gunakan perintah session_destroy() saat Log Out

  • makasih bank atas info..

  • thanks infonya gan.. salam kenal dan sukse selalu buat blog agan..

  • adit

    mas mau tanya ini kok di kolom passwordnya keluarnya di database kok udah di enkripsi ya, klo mau munculin karakter paswword asli yang bukan enkripsi gmana?? mohon pencerahannya

  • perbedaan !isset($_session[‘username’]) ama !session_is_registered(‘username’) apa yya ?? tau ga gan ???

  • makasiii bangett mas … ini yg aku cari ampe 2 hari ..

    aku donlot ya mas

  • mas, kalo syntax mysql utk mengambil hak akses aja,kayak gmn?misal hak aksesnya pake inisial “KA” sebagai admin,”PM” sebagai pimpinan,”KR” sebagai kurir, aku punya syntax kayak gini tpi belum selesai, utk inisial hak akses “KA” udah bisa tapi yang “PM” belum bisa,mohon koreksinya…

    • Nanxz

      coba username, password dan status di echo setelah login, datanya sesuai gag?

  • abi reeha

    kalau mau membuat session group , misalnya group admin hanya boleh buka halaman admin , group guest hanya bisa view saja , kira bagaimana ya ??

  • jujur..ini bermanfaat bagi saya..thank!! cuman pada aplikasi bisa jalan setelah saya hapus md5, $password =md5($_POST[‘password’]); menjadi $password =$_POST[‘password’];
    berhasil..teruuss berkarya

  • Mass… login udah berhasil…
    smua proses dah jalan, sampe

    header(‘location:index.php’); juga sudah muncul…

    tapi kalo dah logout alias

    /menghapus data sesi

    session_destroy();

    kok tetap az index.php masih bisa dibuka????????????????

    Script apa lagi ditambah di index.php tuh…????? mohon pencerahan…..

  • kanita

    ko saya ga berhasil mas,, ga ada tulisan error tpi ga msuk ke database nya juga

    • coba cek koneksi database nya, sukses ga…atau pake echo mysql_error()

  • Wah,.,.akhirnya nemu juga disini,.,.
    makasih banyak gan,.

  • Makasih banyak info nya gan,.,.,

  • hendrik

    @ardian : sama gan, ane juga berhasil setelah MD5 nya di apus…
    btw fungsinya md5 itu buat apaan yah?
    setau ane MD5 itu buat biking halaman login tanpa pake database ?

    • md5 fungsinya untuk menghasilkan sebuah string yang acak secara unik, juga sebagai data security sehingga password yang tersimpan tidak mudah untuk ditebak. untuk kasus diatas, agar bisa login untuk pertama kalinya user & password harus tersedia terlebih dahulu di databse,,,gunakan SQL berikut untuk membuat user&password: INSERT INTO users(username,password,email,first_name, last_name) VALUES(‘myusername’,md5(‘mypwd’),’mymail@gmail.com’,’my firstname’,’my lastname’)

  • yulie

    thanks ya udah bantu bikin tugas gua

  • Pingback: Form Login dengan Otentikasi User mengguanakan AJAX()

  • artikelnya bermanfaat, memang sdang buat sisfo dgan multi admin.

  • scrip yang bagus untuk melindungi halaman login pada blog wordpress saya
    terima kasih sudha berbagi ilmu

  • ali

    databases nya mana gan

  • numpang tanya mas bro
    untuk script formnya dimana?
    aku cari cuma ketemu screenshotnya doank
    thank’s

  • ima

    thankz

  • fajar

    Mas kalo mau buat login dengan tabel yang berbeda dengan session gimana ya mas tolong bantu buat TA