From: Eralp (eralp@prestijsoftware.com)
Date: Sat 29 May 2004 - 19:11:20 EEST
=D6ncelikle veritaban=FDm=FDzda sessions isimli bir tablo yaratal=FDm :
CREATE TABLE `sessions` (
`username` varchar(50) NOT NULL default '',
`sessid` varchar(102) NOT NULL default '',
`logonned` int(20) NOT NULL default '0',
PRIMARY KEY (`username`)
) TYPE=3DMyISAM;
=FEimdi =F6ncelikle kullan=FDc=FDn=FDn login olurken kullanaca=F0=FD =
sessstart
fonksiyonunu yazal=FDm :
function sessstart($kullanici,$db_baglan) {
//e=F0er ayn=FD kullan=FDc=FD ismiyle ba=FEka bir kullan=FDc=FD login =
olmu=FEsa bunu
sistemden atal=FDm. Bu sayede ayn=FD anda login olan iki kullan=FDc=FD
engelleniyor.
$delete=3Dmysql_query("DELETE FROM sessions WHERE
username=3D'$kullanici'",$db_baglan);
//i=E7inde bulundu=F0umuz an=FD timestamp cinsinden alal=FDm
$suan_timestamp=3Dmktime();
//ayn=FD oturum id'sinin ba=FEka kullan=FDc=FDlara da verilmesini =
engellemek
i=E7in bir do while d=F6ng=FCs=FCyle kontrol yap=FDyoruz.=20
do {
//kendimize bir oturum id'si =FCretelim
$sessid=3D md5(uniqid(microtime(), 1)) . getmypid ();
//bu oturum id'si ba=FEka birine atanm=FD=FE m=FD?
$control=3Dmysql_query("SELECT sessid FROM sessions WHERE
sessid=3D'$sessid'",$db_baglan);
} while( mysql_num_rows($control)>0) ;=20
//e=F0er =FCretti=F0imiz id "unique" ise kullan=FDc=FDn=FDn login =
i=FElemini
veritaban=FDna i=FEleyelim
$insert=3Dmysql_query("INSERT INTO `sessions` (`username`, `sessid`,
`logonned`) VALUES ('$kullanici', '$sessid',
$suan_timestamp);",$db_baglan);
//oturum id'sini cookie olarak istemci browser'=FDna g=F6nderelim
setcookie("sessid",$sessid,0);
}
bu fonksiyonda =FEifre kontrol=FC gibi =FEeylere yer verilmedi=F0ini
g=F6r=FCyorsunuz. Bu t=FCr =FEeyler ihtiya=E7lara g=F6re eklenmelidir.
En =F6nemli fonksiyonlardan biri sesscontrol ise =FEu =FEekildedir :
function sesscontrol($sessid,$db_baglan) {
//t=FCm kullan=FDc=FDlar i=E7in genel kontrol 10 dakika i=FElem yapmayan =
at=FDlacak
$suan_timestamp=3Dmktime();
$timestamp=3D$suan_timestamp-1200; // 1200=3D60sn x 10dk bu de=F0er
istenildi=F0i =FEekilde de=F0i=FEebilir.
//son i=FElemini 10 dakika =F6ncesine dek yapm=FD=FE kullan=FDc=FDlar =
at=FDl=FDyor.
$at_query=3Dmysql_query("DELETE FROM sessions WHERE logonned <
$timestamp",$db_baglan);
//tamamd=FDr
//i=FElemini ya=F0t=FD=F0=FDm=FDz kullan=FDc=FD halen sistemde mi?=20
$sessquery=3Dmysql_query("SELECT username FROM sessions WHERE
sessid=3D'$sessid'",$db_baglan);
if (mysql_num_rows($sessquery)<>0){
//evet sistemde
$array=3Dmysql_fetch_row($sessquery);
$login=3D$array[0];
//veritaban=FDndaki logonned alan=FDn=FD =FEu anki zamana g=F6re =
g=FCncelliyoruz
$update=3Dmysql_query("UPDATE `sessions` SET `logonned` =3D =
$suan_timestamp
WHERE `username` =3D '$login' AND `sessid` =3D'$sessid'",$db_baglan);=20
//kullan=FDc=FD ismini fonksiyondan ihra=E7 ediyoruz
return $login;
} else {
//kullan=FDc=FD sistemde de=F0il
//oturum id'sini kullan=FDc=FD browser'=FDndan siliyoruz
setcookie("sessid","",0);
}
}
bu fonksiyonun kullan=FDm=FD =FEu =FEekilde olacakt=FDr :
oturum kontrol=FC yapmak istedi=F0imiz sayfan=FDn ba=FE=FDnda=20
$kullanici=3Dsesscontrol($HTTP_COOKIE_VARS['sessid'],$db_baglan);
gibi bir ifade kullan=FDr=FDz. E=F0er $kullanici de=F0i=FEkeni bir =
de=F0er al=FDyorsa
sistemde login olmu=FE kullan=FDc=FD var demektir e=F0er bo=FE bir =
de=F0er d=F6n=FCyorsa
login olmu=FE kimse yok demektir.
En basit fonksiyonumuz ise logout i=FEleminde kullan=FDlacak sessdestroy
fonksiyonu :
function sessdestroy($kullanici,$db_baglan) {
//kullan=FDc=FDn=FDn login i=FElemini veritaban=FDndan silelim
$delete=3Dmysql_query("DELETE FROM sessions WHERE
username=3D'$kullanici'",$db_baglan);
setcookie("sessid","",0);
}
bu fonksiyon hi=E7 bir de=F0er d=F6nd=FCrmez.
Bu t=FCr i=FElemler i=E7in veritaban=FD kullanmam=FDz=FDn en =F6nemli =
sebebi sitede o
an bulunan ki=FEileri listelemekte sa=F0layaca=F0=FD kolayl=FDkt=FDr.