Posted By: Anjar
Script pengatur waktu Session, Logout Otomatis
Halaman Ini dibaca 1356 kali

Banyak
hal terjadi jika seseorang telah berhasil login sebagai user, dan
tentunya login ini ada ketika user akan memanfaatkan layanan dari suatu
website, bukan karena sebab yang lain, seperti tingkat sekuritas yang
buruk. Selalu ada masa idle. Idle di sini bermakna user tidak melakukan
apa-apa sama sekali di website tersebut, tidak berpindah halaman, tidak
memasukkan input pada form manapun, dan tidak ada hal apapun yang
menyebabkan sebuah halaman website terrefresh, dengan kata lain user
tidak melakukan apa pun pada website yang sedang dia kunjungi. Sungguh
user yang aneh.
~~. Tapi hal seperti ini dapat terjadi jika user
sedang asik mengunjungi website yang lain, dan lupa akan website yang
dia kunjungi sebelumnya. Tentunya keadaan user pada website yang
dikunjungi sebelumnya dianggap sebagai condition yang idle oleh website
tersebut. Tidak ada hal apapun yang terjadi di website sebelumnya. Atau
kondisi lain, dimana seorang user yang telah 10 menit meninggalkan
pc-nya dalam keadaan lupa melogout accountnya. Sungguh terlalu. Di
sinilah fungsi pengatur waktu session benar-benar dibutuhkan.
Ada
dua cara untuk mengatur waktu session, yang pertama adalah merubah
konfigurasi session timeout pada php.ini, cara yang terakhir yaitu
dengan memanfaatkan fungsi time() dan variable session yang telah
teregistrasi, dengan kata lain cara yang terakhir ini adalah merancang
barisan code yang dapat mengatur waktu session. Penulis tidak akan
menjelaskan cara yang pertama. Tapi yang akan penulis jelaskan adalah
cara yang kedua. Penulis akan mengambil sebuah contoh kasus, ini untuk
memudahkan penjelasan secara logika, dan penjelasan alur dari cara
kerja script yang akan dibuat.
Kasusnya seperti ini, “Ketika user
telah berhasil login, akan ada sebuah session yang digunakan sebagai
patokan untuk membandingkan berapa lama user telah berada pada halaman
website tersebut. Apabila waktu time() yang berjalan lebih besar dari
nilai session dari variable yang dijadikan sebagai patokan nanti maka
user tersebut akan secara otomatis terlogout”.
Secara struktur, algoritmanya akan seperti ini :
- Sediakan sebuah variable x, berisi waktu sekarang ditambah 30 detik.
- Jadikan
variable x tersebut sebagai session, yang akan membypass valuenya pada
setiap halaman, dengan kata lain, isi variable x tersebut dapat
ditampilkan di halaman mana pun. - Bandingkan waktu sekarang dengan nilai dari variable x tersebut.
- Jika waktu sekarang lebih kecil dari nilai variable x tersebut, maka si user masih dalam keadaan login.
- Jika waktu sekarang lebih besar dari nilai variable x tersebut, maka keadaan si user adalah logout.
- Jika
user melakukan refresh halaman, berpindah halaman, mengisi form,
sebelum masa sessionnya habis maka waktu login di tambah 10 menit
berikutnya.
Ya, untuk algoritma di atas penulis bagi
menjadi 2 function, yakni function login_validate() dan login_check().
Langsung saja persiapkan script yang dibutuhkan :
File index.php :
<?php
require_once “functions.php”;
if (( $_POST['username'] == ‘admin’ ) && ( $_POST['password'] == ‘admin’))
{
$_SESSION['user'] = $_POST['username'];
login_validate();
header(“location: admin.php”);
}
else if ( empty($_POST['username']) && empty($_POST['password']) )
{
header(“location: login.php”);
}
?>
Selanjutnya file intinya yaitu,
functions.php :
<?php
session_start();
function login_validate() {
$timeout = 30;
$_SESSION["expires_by"] = time() + $timeout;
}
function login_check() {
$exp_time = $_SESSION["expires_by"];
if (time() < $exp_time) {
login_validate();
return true;
} else {
unset($_SESSION["expires_by"]);
return false;
}
}
?>
Kemudian
admin.php, barisan code dalam admin.php ini penulis ibaratkan seperti
kondisi dari admin yang telah berhasil login. Jika lebih dari 30 detik
maka user secara otomatis akan di logout. Nilai 30 detik ini
diambil dari variable $timeout yang ada di functions.php.
File Admin.php :
<?
require_once “functions.php”;
if (ISSET($_SESSION['user']))
{
if (!login_check()) {
header(“Location: logout.php”);
exit(0);
}
else {
echo “Jika tidak ada kegiatan sama sekali, anda akan logout secara otomatis … “;
}
}
else
{
echo “Anda tidak berhak untuk ngapa-ngapain … !!
“;
}
?>
Selanjutnya halaman login usernya, login.php :
<html>
<head><title>Login Page …!</title></head>
<body>
<form action=index.php method=POST>
<table
border=0
bcolor=#DFDFDF><tr><td>username</td><td><input
type=text name=username></td></tr>
<tr><td>password</td><td><input type=password name=password></td></tr>
<tr><td></td><td><input type=submit name=submit value=submit></td></tr>
</table>
</form>
</body>
</html>
Terlihat
jelas pada baris ke 4 di atas, halaman login page memiliki action,
menuju index.php, yang kemudian menghasilkan 2 variable POST, yaitu
$_POST[‘username’], dan $_POST[‘password’]. Kedua variable inilah yang
kemudian dicek pada halaman index.php.
Dan yang terakhir adalah logout.php :
<?php
require_once “functions.php”;
unset($_SESSION['user']);
session_destroy();
header(“location: login.php”);
?>
Cara kerja source code di atas cukup sederhana, lihat barisan code index.php,
……
if (( $_POST['username'] == ‘admin’ ) && ( $_POST['password'] == ‘admin’))
{
$_SESSION['user'] = $_POST['username'];
login_validate();
header(“location: admin.php”);
}
else if ( empty($_POST['username']) && empty($_POST['password']) )
{
header(“location: login.php”);
}
….
Penjelasannya
adalah sebagai berikut, Jika user memasukkan username dan password yang
cocok ( dalam kasus ini username dan passwordnya adalah admin ) maka
user akan diberikan sebuah variable session, yakni
$_SESSION['user'], dan akan ditambahkan sebuah variable baru yang
nantinya variable ini berfungsi sebagai timer,
yakni
$timeout = 30;
Variable
tersebut berada dalam fungsi login_validate() pada script
functions.php. Sedangkan masih dalam fungsi login_validate, lompat ke
barisan code dibawahnya yaitu :
$_SESSION["expires_by"] = time() + $timeout;
Disinilah
letak timer yang sebenarnya, kehebatan dari session adalah dapat
melakukan passing value walaupun halamannya berbeda. Jelasnya
$_SESSION["expires_by"] mengambil nilainya dari waktu ketika user
pertama kali login yaitu time() di tambah dengan 30 detik kedepannya,
yakni isi dari variable $timeout.
Nah, dari situ, lihat ke bagian fungsi yang ada di bawahnya, pada functions.php :
…
function login_check() {
$exp_time = $_SESSION["expires_by"];
if (time() < $exp_time) {
login_validate();
return true;
} else {
unset($_SESSION["expires_by"]);
return false;
}
}
….
Ya, lihat baris :
$exp_time = $_SESSION["expires_by"];
Varibale $exp_time itu memiliki nilai dari $_SESSION["expires_by"],
Untuk
kejelesannya penulis berikan contoh seperti ini, jika user login pada
waktu jam 5, maka $_SESSION["expires_by"] berisi jam ke 5, menit
ke 0, dan detik ke 30. Dan secara alami pun diketahui bahwa yang
namanya waktu pasti akan terus bertambah tentunya. Tapi karena berada
dalam fungsi, variable $_SESSION["expires_by"] ini tidak akan
bertambah, walaupun time() terus berlanjutnya.
Lompat ke baris selanjutnya :
if (time() < $exp_time) {
login_validate();
return true;
Dalam
baris tersebut sederhananya adalah, jika waktu yang sekarang berjalan
lebih kecil nilainya dari nilai yang ada pada
$_SESSION["expires_by"], maka tambahkan 30 detik lagi, dan jika
waktu pada time() sama dengan nilai $_SESSION["expires_by"] maka user
akan otomatis logout
Selanjutnya …
…
else {
unset($_SESSION["expires_by"]);
return false;
}
…
Jika waktu yang sekarang berjalan itu lebih besar dari nilai yang ada pada $_SESSION["expires_by"], maka lakukan logout.
Script tersebut dapat di download di sini
http://networkandgame.890m.com/ilmuwebsite/article/session-time-by-alk.zip
Cukup jelas ya. Jika ada yang di tanyakan, silahkan layangkan pertanyaan ke email penulis. alkemail@gmail.com.
Greetz
: b_scorpio, abuzahra, peterpanz, kandar, phii_, syahrilrohman, ivan,
dr.emi, safril, najwa. Special for jojo.
. Hi, Jo! Have a nice day.
Filed under: Uncategorized