system login dengan hak akses
Pertama buat file config.php untuk
menyimpan semua konfigurasi umum seperti konfigurasi koneksi database.
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses
langsung tidak diizinkan!');
5. }
6.
7. define('BASE_URL', '/tutorial/multi-login/');
8. //koneksi
database
9. define('DB_HOST','localhost');
10.define('DB_USER','root');
11.define('DB_PASS', 'blah');
12.define('DB_NAME' ,'test');
Pada baris ke-2 sampai ke-5
digunakan untuk mencegah akses langsung ke file config.php, file harus
di-include oleh file lain dengan mendifinisikan konstanta __NOT_DIRECT terlebih
dahulu.
Baris ke-7 adalah bagian terpenting, mendifinisikan konstanta BASE_URL jika Anda mengakses tutorial ini di browser seperti http://localhost/tutorial/multi-login/ maka BASE_URL diisi dengan /tutorial/multi-login/. Jika http://localhost/multi-login/ maka isi BASE_URL dengan /multi-login/. Tinggal hilangkan localhost, lebih mudahnya lagi jika Anda membuat tutorial ini di folder htdocs/tutorial/multi-login maka isi BASE_URL dengan tutorial/multi-login.
Baris selanjutnya adalah mendefinisikan konstanta untuk koneksi ke database.
Baris ke-7 adalah bagian terpenting, mendifinisikan konstanta BASE_URL jika Anda mengakses tutorial ini di browser seperti http://localhost/tutorial/multi-login/ maka BASE_URL diisi dengan /tutorial/multi-login/. Jika http://localhost/multi-login/ maka isi BASE_URL dengan /multi-login/. Tinggal hilangkan localhost, lebih mudahnya lagi jika Anda membuat tutorial ini di folder htdocs/tutorial/multi-login maka isi BASE_URL dengan tutorial/multi-login.
Baris selanjutnya adalah mendefinisikan konstanta untuk koneksi ke database.
Konfigurasi
Hak Akses Masing Masing Tipe User
Setelah selesai mendefinisikan
konfigurasi global, selanjutnya adalah membuat file konfigurasi hak akses
masing masing tipe user, halaman web mana saja yang bisa diakses setiap tipe
user.
- Pertama buat folder dengan nama "akses".
- Di dalam folder akses buatlah 3 file, file admin.php untuk pengguna dengan peran admin, file user.php untuk pengguna dengan peran user (user biasa), dan file guest.php untuk pengguna dengan peran guest.
Masing masing file tersebut adalah
sebagai berikut:
file admin.php
file admin.php
1. <?php
2. $__akses_config
= array(
3. 'login.php',
4. 'logout.php',
5. 'admin/index.php',
6. 'admin/list-user.php',
7. 'admin/add-user.php',
8. 'admin/edit-user.php',
9. 'admin/delete-user.php',
10. 'admin/add-artikel.php',
11. 'admin/edit-artikel.php',
12. 'admin/list-artikel.php',
13. 'admin/delete-artikel.php',
14. 'index.php',
15. 'view-artikel.php'
16.);
file user.php
1. <?php
2. $__akses_config
= array(
3. 'login.php',
4. 'logout.php',
5. 'admin/index.php',
6. 'admin/add-artikel.php',
7. 'admin/edit-artikel.php',
8. 'admin/list-artikel.php',
9. 'admin/delete-artikel.php',
10. 'index.php',
11. 'view-artikel.php'
12.);
file guest.php
1. <?php
2. $__akses_config
= array(
3. 'login.php',
4. 'logout.php',
5. 'register.php',
6. 'index.php',
7. 'view-artikel.php'
8. );
ketiga file di atas berisi satu
variabel dengan nama $__akses_config dengan tipe data array, variabel $__akses_config berisi data
array dari halaman halaman mana saja yang bisa diakses masing masing tipe user.
Contoh admin boleh mengakses halaman admin/list-user.php sedangkan user dan
guest tidak bisa, kemudian semua pengguna bisa mengakses halaman login.php.
Jumlah file di folder akses tidak terpaku hanya 3 buah, bisa ditambah sesuai dengan kebutuhan, sesuai dengan tipe user yang diinginkan.
Jumlah file di folder akses tidak terpaku hanya 3 buah, bisa ditambah sesuai dengan kebutuhan, sesuai dengan tipe user yang diinginkan.
File
Untuk Otorisasi User
Langkah selanjutnya adalah membuat
file cek-akses.php. File ini digunakan untuk menentukan apa peran pengguna dan
halaman apa saja yang bisa dikunjungi.
Pertama mencegah akses langsung ke file cek-akses.php, file harus di-include oleh file lain dengan mendifinisikan konstanta __NOT_DIRECT terlebih dahulu.
Pertama mencegah akses langsung ke file cek-akses.php, file harus di-include oleh file lain dengan mendifinisikan konstanta __NOT_DIRECT terlebih dahulu.
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses
langsung tidak diizinkan!');
5. }
Kedua mengecek apakah user sudah login atau belum dan menentukan tipe/peran pengguna.
6. //
....
7. session_start();
8. include_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'config.php';
9. if(!isset($_SESSION['my_user_agent']) || ($_SESSION['my_user_agent']!=md5($_SERVER['HTTP_USER_AGENT']))){
10. //user belum login
11. $__tipe_user = 'guest';
12.}else{
13. $__tipe_user = $_SESSION['tipe_user'];
14.}
Membuka session di baris ke-7, baris
ke-8 meng-include file config.php yang telah dibuat sebelumnya.
Baris ke-9 sampai 14 mengecek apakah pengguna sudah login, jika belum login
maka tipenya adalah "guest" dan sebaliknya tipe user sesuai
dengan nilai $_SESSION['tipe_user'] (sesuai dengan nilai dari tabel user).
Catatan:
Berikut penjelasan beberapa fungsi yang mungkin baru Anda ketahui:
Catatan:
Berikut penjelasan beberapa fungsi yang mungkin baru Anda ketahui:
- DIRECTORY_SEPARATOR adalah konstanta yang berisi nilai 'pemisah folder', di windows nilainya \ dan di linux /.
- __FILE__ adalah konstanta yang berisi nilai nama lengkap file beserta nama foldernya misal, file cek-akses.php ada di folder C:\xampp\htdocs\multi-login maka __FILE__ akan berisi C:\xampphtdocsmulti-logincek-akses.php.
- dirname fungsi untuk mendapatkan nama folder dari sebuah file atau folder, dirname('C:\xampp\htdocs\multi-login\cek-akses.php'); akan menghasilkan 'C:\xampp\htdocs\multi-login'.
Ketiga meng-include salah satu file yang ada di folder akses yang dibuat sebelumnya, sesuai dengan tipe pengguna yang diperoleh pada kode di atas. Jika tipe pengguna guest maka include file akses/guest.php, jika admin maka include file akses/admin.php
15.//.....
16.$aksesFilename
= dirname(__FILE__).DIRECTORY_SEPARATOR.'akses'.DIRECTORY_SEPARATOR.$__tipe_user.'.php';
17.if(!file_exists($aksesFilename)){
18. die('Terjadi
kesalahan sistem');
19.}
20.include $aksesFilename;
Keempat menentukan file yang sedang diakses oleh pengguna dan mengecek apakah pengguna diperbolehkan mengakses file tersebut.
21.//.........
22.$arrayCurrentPath
= explode('?',$_SERVER['REQUEST_URI']);
23.$currentPath
= substr($arrayCurrentPath[0], strlen(BASE_URL));
24.
25.$allow = in_array($currentPath, $__akses_config);
Kelima jika pengguna tidak diizinkan dan pengguna belum login maka pengguna dialihkan ke halaman login (baris 28 dan 29), sebaliknya ditampilkan text "Anda tidak diizinkan mengakses halaman ini!" (baris 31).
26.//..........
27.if(!$allow){
28. if($__tipe_user == 'guest' && $currentPath
!= 'login.php'){
29. header("Location:
".BASE_URL.'login.php');
30. }else{
31. echo "Anda tidak diizinkan
mengakses halaman ini!";
32. }
33. exit;
34.}
Setelah semua langkah di atas
digabungkan maka file cek-akses.php akan seperti:
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses
langsung tidak diizinkan!');
5. }
6.
7. session_start();
8.
9. require_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'config.php';
10.
11.if(!isset($_SESSION['my_user_agent']) || ($_SESSION['my_user_agent']!=md5($_SERVER['HTTP_USER_AGENT']))){
12. //user belum login
13. $__tipe_user = 'guest';
14.}else{
15. $__tipe_user = $_SESSION['tipe_user'];
16.}
17.
18.$aksesFilename
= dirname(__FILE__).DIRECTORY_SEPARATOR.'akses'.DIRECTORY_SEPARATOR.$__tipe_user.'.php';
19.if(!file_exists($aksesFilename)){
20. die('Terjadi
kesalahan sistem');
21.}
22.include $aksesFilename;
23.
24.$arrayCurrentPath
= explode('?',$_SERVER['REQUEST_URI']);
25.$currentPath
= substr($arrayCurrentPath[0], strlen(BASE_URL));
26.
27.$allow = in_array($currentPath, $__akses_config);
28.
29.if(!$allow){
30. if($__tipe_user == 'guest' && $currentPath
!= 'login.php'){
31. header("Location:
".BASE_URL.'login.php');
32. }else{
33. echo "Anda tidak diizinkan
mengakses halaman ini!";
34. }
35. exit;
36.}
Otentikasi
Pengguna
Setelah membuat skrip untuk
otorisasi pengguna di atas, langkah selanjutnya adalah membuat skrip untuk
Otentikasi user.
File
Login.php
Berikut adalah langkah langkah untuk
membuat file login.php, langkah langkah mengotentikasi pengguna.
Pertama mendefinisikan konstanta __NOT_DIRECT dan meng-include file cek-akses.php
Pertama mendefinisikan konstanta __NOT_DIRECT dan meng-include file cek-akses.php
1. defined('__NOT_DIRECT') || define('__NOT_DIRECT',1);
2. include
'cek-akses.php';
Kedua cek apakah pengguna sudah menginput user_id & password dan menekan tombol login, kemudian membuka koneksi ke database
3. //....
4. if($_POST){
5. mysql_connect(DB_HOST,DB_USER,DB_PASS);
6. mysql_select_db(DB_NAME);
Ketiga cek kebenaran user_id dan password yang diinput pengguna. Jika benar buat 3 session $_SESSION['tipe_user'], $_SESSION['user_id'], dan $_SESSION['my_user_agent'] dan alihkan pengguna ke halaman admin/index.php. Sebaliknya jika user_id atau password salah tampilkan pesan "ID User atau password salah!"
7. //..........
8. $userId = mysql_real_escape_string($_POST['user_id']);
9. $data = mysql_fetch_array(mysql_query("select * from user where
user_id='".$userId."'"));
10. if($data !== false && $data['password']
== md5($_POST['password'])){
11. //login berhasil
12. $_SESSION['tipe_user'] = $data['type'];
13. $_SESSION['user_id'] = $data['user_id'];
14. $_SESSION['my_user_agent'] = md5($_SERVER['HTTP_USER_AGENT']);
15. header("Location:
admin/index.php");
16. }else{
17. echo "ID User atau password
salah!";
18. }
19.}?>
Keempat membuat form login
19.//.......
20.<form
method="post" action="">
21.ID User: <input
type="text" name="user_id"/>
22.Password: <input
type="password" name="password"/>
23.<input
type="submit" value="Login"/>
24.</form>
Jika digabungkan file login.php akan
menjadi:
1. <?php
3. include
'cek-akses.php';
4. if($_POST){
5. mysql_connect(DB_HOST,DB_USER,DB_PASS);
6. mysql_select_db(DB_NAME);
7. $userId = mysql_real_escape_string($_POST['user_id']);
8. $data = mysql_fetch_array(mysql_query("select * from user where
user_id='".$userId."'"));
9. if($data !== false && $data['password']
== md5($_POST['password'])){
10. //login berhasil
11. $_SESSION['tipe_user'] = $data['type'];
12. $_SESSION['user_id'] = $data['user_id'];
13. $_SESSION['my_user_agent'] = md5($_SERVER['HTTP_USER_AGENT']);
14. header("Location:
admin/index.php");
15. }else{
16. echo "ID User atau password
salah!";
17. }
18.}
19.?>
20.<form
method="post" action="">
21.ID User:
<input type="text" name="user_id"/>
22.Password:
<input type="password" name="password"/>
23.<input
type="submit" value="Login"/>
24.</form>
Cara
Menggunakan File cek-akses.php
Untuk menggunakan cek-akses.php
sangat sederhana seperti
2. include
'cek-akses.php';
Sekarang buatlah folder admin dan
file admin/index.php, admin/add-user.php dan admin/add-artikel.php. Masing
masing file ditambahkan kode di bawah di bagian paling atas.
1. <?php
3. include
'../cek-akses.php';
4. ?>
Label: php dan mysql
0 Komentar:
Posting Komentar
Berlangganan Posting Komentar [Atom]
<< Beranda