MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

Oturum Yonetimi - BOLUM 1 Yazar: Serkan Tarih: 01/03/02

PHP Ile Istemci-Server Iliskisinde "Israrci" Olmak - BOLUM 1

PHP4 Oturum Yonetimi

PHP kendi icinde cok gelismis bir "oturum yonetim sistemi" ile beraber gelir.Bu nedenle cok fazla detayla ugrasmaya gerek kalmaz.

Bilinmesi gereken en onemli konu "session identifier" denilen (Genel olarak bilinen adiyla SID) ozel bir degiskenin, her istemciyi spesifik edebilmek icin referans numarasi verilmek suretiyle atanmasidir.

Bu verilen referans numarasi bir nevi elektrik faturasi numarasi gibidir.Siz nasil Elektrik sirketine gidip te faturanizi gosterdiginizde onlar uzerindeki numaradan sizinle ilgili her bilgiye ulasabiliyorsa veya her seferinde adinizi soyadinizi soylemek zorunda kalmiyorsaniz ayni sekilde PHP de istemcileri bu numara ile tanir ve yonetir...

Eger oturumu baslatirsaniz server tarafindan otomatik olarak SID atanir.Herhangi bir degiskeni "oturum degiskeni" olarak kayit ettiginiz anda server uzerinde cookie benzeri bir dosya acilir.(Bu dosyanin adi genelde SID'nin degeri ile aynidir).Istemci tarafindaki bilgisayar ne zaman bu veriye ulasmak isterse, yapmasi gereken tek sey istekle beraber SID numarasini da beraber gondermektir.Bu gonderme islemi hidden html kontrolleri,cokkie'ler,sorgu dizisi vb., yani herhangi bir yontemle olabilir.Eger istegi yapan istemci SID'yi beraberinde gonderiyorsa kendisi icin ayrilan bu dosyadan kayit edilen "oturum degiskenleri" okunarak istemcinin istedigi gibi bunlari kullanmasi saglanir.

Eger istemcide cookie destegi aciksa bu deger istemci makinede cookie olarak bile saklanabilir.Eger bu ozelligi kullanamak istemiyorsaniz/veya kullanamiyorsaniz en basit yol bu SID degerini yapilan butun isteklerle beraber gondermektir.

PHP4 ile oturum yonetimi cok basit hale getirilmistir.Bir cok durum icin su cumle gecerilidir:

"Ben X,Y, ve Z degiskenlerinin tum istemci-server iliskisinde israrla kalici olmasini istiyorum."

Volila iste hepsi bu :))

Birakin PHP4 bundan sonraki kirli isleri kendisi ele alsin.Tek bilmeniz gereken (Bir programci olarak)bir degiskenin nasil oturum degiskeni olarak kayit edilecegini ogrenmektir.Bu durumda belirttiginiz degisken "israrla" oturum boyunca saklanacaktir.

Peki bu durumdaki bir "oturum degiskenine" nasil erisilecektir?

PHP4 ile bir degiskeni "oturum degiskeni" seklinde kayit etmek session_register () fonksiyonu ile saglanmaktadir.

Degiskeninin ismi Dolar isaretleri OLMADAN verilmelidir.Bu durumda verilen degisken ve sakladigi deger butun oturum boyunca saklanacaktir.Eger tanimli/gecerli bir oturum yok ise o anda otomatik olarak bir tane yaratilacaktir.

Bir ornek vermek istersek, $var1 ve $var2 degiskenlerini israrci/kalici yapmak istiyoruz.Bu durumda PHP scriptimizi yazmaya su sekilde baslayabiliriz :

<?php
session_register ("var1") ;
session_register ("var2") ;
?>

Onemli Bir Konu :Bu gibi durumlarda eger bir degiskeni "oturum degiskeni" olarak kayit etmek istiyorsaniz bunu scriptin en basinda yapin.Boylece herhangi bir HTTP istegi hazirlanip gonderilmeden butun oturum degiskenlerini mukkemel bir sekilde kayit etmis olacaksiniz.Bu sizin ,cogu zaman gordugumuz "Error: HTTP headers already sent" hatasindan kurtaracaktir.Aklinizda bulunsun :))

Bir kere o degiskeni oturum degiskeni olarak kayit ettikten sonra o degiskenin sakladigi degere ulasmak inanilmaz derecede kolaylasir.Diger global degiskenlere ulasirken kullandiginiz yollari ayni sekilde bu tip oturum degiskenlerinde de kullanabilirsiniz.Diger her tur degiskene ulasirken kullandiginiz yol ve yontemler bunlar icin de gecerlidir.Diger degiskenlerden tek farki bu sekilde kayit ettigimiz oturum degiskenlerinin oturum acik kaldigi surece erisilebilir olmalaridir.

Bir ornek yaparak konuya devam edelim.

1.Text editorunuzu acin ve asagidaki kodlari yazin.

<?php
session_register ("izlenme1say");
session_register ("izlenme2say");
session_register ("izlenme3say");
session_register ("izlenme4say");
?>

/* Yanlizca oturumla ilgili bolumu temiz bir sekilde scriptin ayri bir bolumune bu sekilde yazdim.
*/

<?php
//sayfa_sayac.php

if (!$izlenme1say) $izlenme1say =0;
if (!$izlenme2say) $izlenme2say =0;
if (!$izlenme3say) $izlenme3say =0;
if (!$izlenme4say) $izlenme4say =0;

/* Scriptin bundan sonraki kismi cok yogun bir sekilde gorulen ve browserimizin uzerinde tasinan oturum numarasinin nasil gerceklestigini gostermektedir.Onemle incelemenizi rica ederim...PHP oturum bilgilerinize erismek icin bu SID'ye kesinlkle ihtiyac duyar.Biz yarattigimiz hyperlinkleri bu sekilde SID'yi icerecek sekilde hazirlayarak ona bu bilgiyi de saglamis oluyoruz.
*/

echo "<HTML><HEAD><TITLE>Web Sayfasi icin Erisim Sayaci</TITLE></HEAD><BODY>";

if ($hangisayfa) {
echo "Su anda $hangisayfa numarali sayfadasiniz.<BR><BR>n";
$GLOBALS["izlenme${hangisayfa}say"]++;

}

for ($i=1; $i <= 4; $i++) {

if ($hangisayfa == $i) {
echo "<A HREF="$PHP_SELF?".SID."&hangisayfa=$i">Sayfa $i</A>";
} else {
echo "<A HREF="$PHP_SELF?".SID."&hangisayfa=$i">Sayfa $i</A>";
}
echo ",bu sayfayi toplam ".$GLOBALS["izlenme${i}say"]." kere goruntulediniz.<BR>n";
}
echo "nn<BR><BR>nn";
echo "</BODY></HTML>";

?>

2.Bu dosyayi "oturumyonetimi1.php" olarak bilgisayariniza kayit edin.

3.Browser yardimiyla sayfayi goruntuleyin.

Ornek Programlar

http://www.turk-php.com/ornekler/oturumyonetimi1.php

http://www.turk-php.com/ornekler/oturumyonetimi1.phps

(Lutfen programin kaynak kodlarini buradan izleyiniz.Bazi HTML kodlari otomatik olarak calismaktadir.Bu nedenle biz yazmis olsak dahi sayfa icinde duz yazi seklinde degilde islenmis halde gorunuyor.Buna ornek olarak ve taglarini verebiliriz...)

Not : Browseri kapatip tekrar acin. Sayfaya tekrar baglanin butun verilerin ayni sekilde yerinde durdugunu goreceksiniz :)

Program Nasil Calisiyor

Programa session_register komutu ile 4 tane degiskenimi oturum degiskeni olacak sekilde kayit ederek basliyorum.
Daha iyi anlamaniz icin boyle ilk kisimda <?php ve ?> taglari arasina yazdim.

<?php
session_register ("izlenme1say");
session_register ("izlenme2say");
session_register ("izlenme3say");
session_register ("izlenme4say");
?>

Ondan sonra ana blokun yapimina basladim.Eger herhangi bir sayfa daha once goruntulenmemis ise "0" degeri almasini sagliyorum.(Bunu yarparken ayni zamanda degiskenlerimin "sayi" tipinde veri icerecegini PHP'ye fisildamis oluyorum :))

<?php
//sayfa_sayac.php

if (!$izlenme1say) $izlenme1say =0;
if (!$izlenme2say) $izlenme2say =0;
if (!$izlenme3say) $izlenme3say =0;
if (!$izlenme4say) $izlenme4say =0;

Programin ucuncu bolumunde kullanicin o anda hangi sayfada bulundugu bilgisi verilmektedir.Ayni zamanda o sayfayi goruntuledigi icin o sayfaya ait degiskenin degeri 1 arttirilmaktadir.($hangisayfa degiskeni biz sayfayi goruntulereken donguden alip programa "url" icinde gonderiyoruz.Simdiye kadar hic tanimlamadigimiz halde programin isleyisini gozonune alirsaniz olayin mantigini anlarsiniz.Yani zaten bu degisken bir degere sahip degilse programin nasil isleyecegine bakin...)

if ($hangisayfa) {
echo "Su anda $hangisayfa numarali sayfadasiniz.<BR><BR>n";
$GLOBALS["izlenme${hangisayfa}say"]++;

}

Programin dorduncu bolumunde "for" dongusu kullanilarak sayfalarin adi ve linkleri ekrana yaziliyor.Gordugunuz gibi bulundugumuz sayfanin linkini de "koyu" yapmayi unutmadik...

Bu konu ile ilgili anlamadiginiz yerleri simdi asagidaki "Bu konu hakkinda ne dusunuyorsunuz?" bolumune yaziniz.Ben gunluk kontrol ediyorum.Eger sorunuz bu yazilan programla ilgili ise buyuk ihtimal cevap alirsiniz :))

Kendinize iyi bakin,

Serkan
serkan@turk-php.com

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>