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
|