Bismillah… pada artikel kali ini saya akan mencoba memaparkan
bagaimana teknik atau ide dalam membuat sistem login untuk aplikasi
multi user.
Dalam suatu aplikasi bisa jadi terdapat lebih dari satu user dan
dengan level yang berbeda-beda. Dengan adanya pembagian level tersebut
diharapkan adanya hak akses yang berbeda. Untuk memudahkan Anda dalam
membayangkan hal ini, misalkan terdapat 5 user katakanlah A, B, C, D dan
E dimana user A, B dan C adalah level ‘administrator’, sedangkan D dan E
user biasa. Nah… user A, B, dan C ini misalkan berhak mengakses halaman
1, 2 dan 3 dari aplikasi sedangkan D dan E hanya boleh mengakses
halaman 3 saja. Dengan kata lain hak akses ke halaman-halaman tersebut
ditentukan oleh level usernya.
Pemberian hak akses pada masing-masing user ini bisa dalam bentuk
link menu. Ketika seorang user telah melakukan login, dan loginnya
sukses maka akan muncul menu link ke halaman-halaman yang boleh
diaksesnya. Sebagai gambaran misalnya pada contoh di atas, setelah user A
login dan loginnya berhasil maka akan muncul menu link menuju ke
halaman 1, 2 dan 3 karena si A ini levelnya Administrator. Namun untuk
si D, karena levelnya user biasa, maka hanya akan muncul menu link
menuju halaman 3 saja.
Nah… lantas bagaimana ide dan teknik dalam membuat sistem login
terkait dengan hak akses untuk multi user seperti kasus di atas? Inilah
yang akan saya beberkan rahasianya dalam artikel ini. Artikel ini
merupakan request dari xfreecode (member saya) sekaligus salah satu dari sekian banyak trik dan teknik yang saya paparkan pada peserta kursus online PHP bersama saya.
Ide dan teknik untuk menyelesaikan kasus di atas sebenarnya hanyalah
pada penggunaan SESSION. Setelah user berhasil login, maka dibaca level
usernya. Untuk memudahkan pengecekan level user ini, maka level user
disimpan pada SESSION. Nah.. level user yang tersimpan dalam SESSION
inilah yang nantinya akan banyak dicek untuk keperluan pembatasan hak
akses user pada halaman-halaman yang sifatnya private.
OK.. OK… sudah paham deh idenya, tapi gini… bagaimana seandainya ada
user yang nakal? misalkan user E dengan level user biasa kebetulan tahu
link URL menuju ke halaman 1. Lantas si E ini mencoba mem bypass link
menuju halaman 1 melalui URL langsung tanpa melewati menu link, padahal
halaman 1 ini adalah restricted area bagi user biasa (dalam hal ini si
E). Nah lo… gimana hayoo?? ya… seorang programmer harus pinter-pinter
ngakali. Trus… Gimana ngakalinya? ya… sebelum bagian script yang
menampilkan konten pada halaman 1 terlebih dahulu harus mengecek level
usernya sebagai ‘administrator’ atau tidak, melalui pengecekan SESSION
nya. Jika ya, maka tampilkan kontennya, dan jika tidak maka munculkan
pesan ‘Anda mau mencoba masuk ya?? Kagak boleh atuh ‘
OK.. deh … stop berteori, sekarang let’s do it!
Untuk studi kasusnya, misalkan kita punya data user sebagaimana tersaji dalam tabel berikut ini
1.
CREATE
TABLE
user
(
2.
username
varchar
(20),
3.
password
varchar
(20),
4.
level
varchar
(20),
5.
PRIMARY
KEY
(username)
6.
);
1.
INSERT
INTO
`
user
`
VALUES
(
'a'
,
'pass1'
,
'admin'
);
2.
INSERT
INTO
`
user
`
VALUES
(
'b'
,
'pass2'
,
'admin'
);
3.
INSERT
INTO
`
user
`
VALUES
(
'c'
,
'pass3'
,
'user'
);
4.
INSERT
INTO
`
user
`
VALUES
(
'd'
,
'pass4'
,
'user'
);
5.
INSERT
INTO
`
user
`
VALUES
(
'e'
,
'pass5'
,
'user'
);
Wah.. passwordnya kok tidak dienkripsi? he 3x… ya itu saya sengaja
karena supaya Anda bisa mencoba script yang saya buat ini. Memang
sebaiknya passwordnya Anda enkripsi, paling tidak menggunakan md5().
Nah.. selanjutnya kita buat form loginnya.
login.htm
01.
<
form
method
=
"post"
action
=
"loginsubmit.php"
>
02.
<
table
border
=
"0"
>
03.
<
tr
>
04.
<
td
>Masukkan Username </
td
>
05.
<
td
><
input
name
=
"username"
type
=
"text"
></
td
>
06.
</
tr
>
07.
<
tr
>
08.
<
td
>Masukkan Password </
td
>
09.
<
td
><
input
name
=
"pass"
type
=
"password"
></
td
>
10.
</
tr
>
11.
<
tr
>
12.
<
td
> </
td
>
13.
<
td
><
input
type
=
"submit"
name
=
"Submit"
value
=
"Submit"
></
td
>
14.
</
tr
>
15.
</
table
>
16.
</
form
>
Form login sudah dibuat, berikutnya kita buat script untuk memproses loginnya.
loginsubmit.php
01.
<?php
02.
03.
// memulai session
04.
session_start();
05.
06.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
07.
mysql_select_db(
'dbname'
);
08.
09.
$username
=
$_POST
[
'username'
];
10.
$password
=
$_POST
[
'pass'
];
11.
12.
// query untuk mendapatkan record dari username
13.
$query
=
"SELECT * FROM user WHERE username = '$username'"
;
14.
$hasil
= mysql_query(
$query
);
15.
$data
= mysql_fetch_array(
$hasil
);
16.
17.
// cek kesesuaian password
18.
if
(
$password
==
$data
[
'password'
])
19.
{
20.
echo
"<h1>Login Sukses</h1>"
;
21.
22.
// menyimpan username dan level ke dalam session
23.
$_SESSION
[
'level'
] =
$data
[
'level'
];
24.
$_SESSION
[
'username'
] =
$data
[
'username'
];
25.
26.
// tampilkan menu
27.
include
"menu.php"
;
28.
29.
}
30.
else
echo
"<h1>Login gagal</h1>"
;
31.
32.
?>
Bila Anda perhatikan pada script di atas, maka terlihat bahwa menunya
membaca script menu.php. Di dalam script menu.php sendiri nantinya
terdapat pengecekan level usernya yang tadi tersimpan dalam session
sewaktu login sukses. Bila level usernya adalah ‘admin’ maka tampilkan
menu link menuju halaman 1, 2, dan 3. Begitu pula untuk level ‘user’.
menu.php
01.
<?php
02.
03.
session_start();
04.
05.
if
(
$_SESSION
[
'level'
] ==
"admin"
)
06.
{
07.
// tampilkan menu untuk admin
08.
echo
"<a href='hal1.php'>Halaman 1</a> "
;
09.
echo
"<a href='hal2.php'>Halaman 2</a> "
;
10.
echo
"<a href='hal3.php'>Halaman 3</a> "
;
11.
echo
"<a href='logout.php'>Logout</a> "
;
12.
}
13.
else
if
(
$_SESSION
[
'level'
] ==
"user"
)
14.
{
15.
// tampilkan menu untuk user biasa
16.
echo
"<a href='hal3.php'>Halaman 3</a>"
;
17.
echo
"<a href='logout.php'>Logout</a> "
;
18.
}
19.
20.
?>
Selanjutnya, kita bisa mulai membuat konten pada halaman 1, 2 dan 3.
Ingat.. sebelum menampilkan kontennya sebaiknya dicek level usernya
terlebih dahulu. Bila levelnya tidak sesuai dengan hak aksesnya, maka
jangan ragu untuk menolak
Untuk halaman 1, dari kasus yang kita ambil hanya bisa diakses oleh
user berlevel ‘admin’ saja. Begitu pula untuk halaman 2. Namun untuk
halaman 3, baik level ‘admin’ maupun ‘user’ biasa boleh mengaksesnya.
hal1.php
01.
<?php
02.
03.
session_start();
04.
05.
// cek apakah user yang mengakses halaman ini sudah melalui login atau belum
06.
// logikanya jika user telah login dan sukses, maka SESSION level dan SESSION username ini pasti sudah ada
07.
// jika ada user yang mencoba akses halaman ini tanpa login, maka logikanya kedua SESSION belum ada
08.
09.
if
(isset(
$_SESSION
[
'level'
]) && isset(
$_SESSION
[
'username'
]))
10.
{
11.
// tampilkan menu.
12.
// menu hanya ditampilkan bila halaman ini diakses oleh user yang telah login
13.
14.
include
"menu.php"
;
15.
16.
// cek level user apakah admin atau bukan
17.
18.
if
(
$_SESSION
[
'level'
] ==
"admin"
)
19.
{
20.
// tampilkan konten halaman 1 jika levelnya admin
21.
22.
echo
"<h1>Halaman 1</h1>"
;
23.
echo
"<p>Selamat datang di halaman satu wahai user : "
.
$_SESSION
[
'username'
].
"</p>"
;
24.
echo
"<p>Ini adalah konten halaman 1</p>"
;
25.
}
26.
else
27.
{
28.
// jika levelnya bukan admin, tampilkan pesan
29.
echo
"<h1>Maaf.. Anda bukan user berlevel Administrator</h1>"
;
30.
}
31.
}
32.
else
33.
{
34.
echo
"<h1>Nah.. Anda pasti mencoba akses halaman ini tanpa login ya?</h1>"
;
35.
}
36.
37.
?>
Untuk halaman 2, konsepnya juga sama seperti script halaman 1 di atas, hanya yang berbeda pada kontennya tentu saja Sekarang untuk halaman ke-3 di mana yang bisa mengakses adalah semua level user, scriptnya adalah:
hal3.php
01.
<?php
02.
03.
session_start();
04.
05.
if
(isset(
$_SESSION
[
'level'
]) && isset(
$_SESSION
[
'username'
]))
06.
{
07.
include
"menu.php"
;
08.
09.
if
((
$_SESSION
[
'level'
] ==
"admin"
) || (
$_SESSION
[
'level'
] ==
"user"
))
10.
{
11.
echo
"<h1>Halaman 3</h1>"
;
12.
echo
"<p>Selamat datang di halaman tiga wahai user : "
.
$_SESSION
[
'username'
].
"</p>"
;
13.
echo
"<p>Ini adalah konten halaman 3</p>"
;
14.
}
15.
}
16.
else
17.
{
18.
echo
"<h1>Nah.. Anda pasti mencoba akses halaman ini tanpa login ya?</h1>"
;
19.
}
20.
21.
?>
Eits… hampir lupa, yang terakhir kita buat script logoutnya. Pada
prinsipnya proses logout adalah menghapus semua session yang tadi
terbentuk ketika login sukses.
logout.php
1.
<?php
2.
3.
session_start();
4.
session_destroy();
5.
echo
"<h1>Anda sudah logout</h1>"
;
6.
echo
"<p><a href='formlogin.htm'>Login Kembali</a></p>"
;
7.
8.
?>
That’s it… mudah bukan membuatnya? Mudah-mudahan artikel di atas
menjawab semua unek-unek yang dihadapi bagi Anda yang ingin membuat
aplikasi dengan multi user.