Memastikan hanya ada satu user yang login pada satu waktu

7 February 2012

Tadi siang ada seorang mahasiswa yang menanyakan hal ini ke saya,....
Setelah mengalami ujian TOEFL yang agak menyeramkan dan setelah pulang ke rumah dengan selamat,.... maka saya coba otak-atik sedikit,.... dan jadilah sebuah script yang sesuai dengan judul di atas.

Cara kerja nya begini:

Saya mulai sebuah session dengan session start
Saya bandingkan session_id dari session yang sudah ada dengan namaUser yang baru login
jika ternyata sudah ada session lain dengan session id sesuai dengan namaUser, maka sudah ada yang login
jika ternyata belum ada, maka kita ubah session id dari session kita


Bagaimana kita bisa tahu sebuah session dengan id tertentu sudah ada pemiliknya?
Sebenarnya setiap session kita tersimpan di sebuah lokasi. Kalau di ubuntu path nya ada di /var/lib/php5
kalau di windows,.... cari sendiri,... (sebenarnya bisa juga digunakan function session_save_path() untuk tahu dimana lokasi file2 keramat itu)

Ok, tanpa banyak basa basi lagi, saya langsung tuliskan script nya di sini:

";
echo "session id kita ". session_id()."
";
//is variable ini nanti didapat dari login user atau apa gitu,...
$namaUser = "ipin";

//kalau sudah ada ya ga boleh login dong,.....
if(file_exists(session_save_path()."/sess_".$namaUser) &&
session_id() != $namaUser)
{
echo "user ".$namaUser." sudah login, hayo loe mau nge hack ya?....";
//lakukan sesuatu kepada tersangka kita ini,.....
}
else
{
session_destroy();
//ubah session_id menjadi sama dengan namaUser
session_id($namaUser);
session_start();
echo "selamat datang ". session_id()."
";
echo "session id kita sekarang ". session_id()."
";
//ini untuk mengimpan login user
$_SESSION["id"] = $namaUser;
}


?>

Maka waktu saya pertama kali "login" pakai firefox, tampilannya seperti ini:
session disimpan di /var/lib/php5
session id kita h34thyuhvlkjjd2r4j46m5qnvh6
selamat datang ipin
session id kita sekarang ipin

Kemudian waktu saya kedua, ketiga, keempat dan kesekian kali "login" pakai firefox, tampilannya seperti ini:
session disimpan di /var/lib/php5
session id kita ipin
selamat datang ipin
session id kita sekarang ipin

Tapi kalau saya "nakal" dan menggunakan chrome, opera, IE atau yang lainnya, tampilannya akan seperti ini:
session disimpan di /var/lib/php5
session id kita qqi7r1hvlkjjd2q4j46m3qvnh3
user ipin sudah login, hayo loe mau nge hack ya?....


Info lengkapnya : http://komunitas.stiki.ac.id/web-development/544-memastikan-hanya-ada-satu-user-yang-login-pada-satu-waktu-php.html


Sumber : Jasa Pembuatan Website dan Sistem Informasi http://klatenweb.com
Selengkapnya : http://klatenweb.com/read/2012/02/07/841/Memastikan-hanya-ada-satu-user-yang-login-pada-satu-waktu.html