Total Tayangan Halaman

Senin, 05 April 2010

Menghapus session ketika jendela ditutup (auto logout)

(bug fixed: ketika user melakukan refresh atau menutup browser, mekanisme tidak berjalan dengan semestinya)
Yah, ini dia. Bagaimana cara membersihkan server dari file-file session, sehingga hardisknya tidak cepet penuh. Sebenarnya php melakukan pembersihan sih, tetapi hal tersebut berjalan semi otomatis (random). Kebiasaan kita kan langsung menutup browser, tanpa melakukan logout terlebih dahulu. Nah, lo, bisa bahaya nih, orang lain bisa melihat akun pelanggan kita yang lupa tidak logout dahulu. Oleh karena itu, sebenarnya menu logout tidak diperlukan (karena sering diabaikan).

Solusinya adalah mengeksekusi skrip yang dipanggil ketika browser ditutup, yaitu pada bagian body dengan event onUnLoad.

index.php
<html>
<?
session_cache_limiter('no-cache');

function randSessName()
{
$str = "s";
for($i=0; $i<10; $i++) $str .= dechex(mt_rand(0, 15)); return $str; } session_name(randSessName()); session_start(); $_SESSION[contoh] = "blablabla"; session_write_close(); ?> <body onUnLoad="open('hapus_sesi.php?id=<? echo session_name(); ?>', 'tutup', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no, resizable=no,copyhistory=yes,width=50,height=50,left=100,top=100,screenX=50, screenY=50')"> Ini adalah halaman index. Silakan untuk melakukan pengecekan file-file sesi pada <? echo session_save_path(); >. Setelah browser ini ditutup, silakan cek lagi folder tersebut. </body> </html>

sesi.inc.php
<?
function _delete_session($sessName)
{
$_SESSION = array();
if (ini_get("session.use_cookies"))
{
$params = session_get_cookie_params();
setcookie($sessName, '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
}
?>


hapus_sesi.php
<?
session_name($_GET[id]);
session_start();
_delete_session($_GET[id]);
?>
Sesi sudah dihapus
<script language="javascript">
setInterval('this.close()', 100);
</script>

2 komentar:

rikoy mengatakan...

makasih share nya, tp saya masih kurang paham gan, gimana nge inplementasikan nya, klo dari contoh agan itu nambahin file nya, nah gimana klo urusannya ke database nya?

rikoy mengatakan...

kalo pake unload, di refresh jg jd nge eksekusi ya gan?gimana klo cuman buat close aja?