[linux-programlama] Oturum Yonetimi

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

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.


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.