MultiServis.Net //PHP El Kitabı

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

Cerezler ve PHP - BOLUM 1 Yazar: Serkan Tarih: 01/03/02

Cookies (Cerez Dosyalari):

Kucuk,hafif,portatif oldukca hizli bir veri depolama bicimi...Iste bunun ismi ne yazikki Turkce'de "cerez dosyasi".(Onlarin kulturunde kurabiye bizim kulturumuzde cerez agir basiyor herhalde..)

Biraz detaya girmek gerekirse, istemci-server arasindaki veri iletisiminde bu "cerez dosyalari" istemci tarafin tarayicisinda(browser'inda) kucuk capli verileri saklamak icin gelistirilmistir.

Kullanim alani: Kucuk,fakat oldukca yardimci olabilecek "kritik" olmayan verilerin saklanmasidir.Buna en iyi ornek sitenin gorunumunu istedigi gibi degistiren kullanici icin ayarlarin kendi bilgisayarinda,kullandigi tarayicinin ozel bir alaninda "cerez dosyasi" tabir edilen kucuk dosyalarda saklanmasdir.

Nasil Kullanilir?

Bunu kesin kurallara dayandirarak aciklamak mumkun degil cunku ziyaretcinin kullandigi browser'dan browser'a degisiklik gostermektedir.

Simdi size anlatacaklarimiz "cerez dosya"larinin kullanimina iliskin genel kurallardir.

- "Cerez Dosyasi" bir parca verinin, (degisken ismi ve o degiskene ait deger) saklanmasi icin istemci tarafin hard diskinde browser kontrolunde yaratilan dosyadir.
- "Cerez Dosya"lari ile istemci-tarafinda veri saklanabilmektedir.
- Web siteleri genellikle kendi "Cerez Dosya" larini yeniden duzenleyebilir veya islem yapabilirler.
- Eger minumum guvenlik kriterleri saglanmis ise,"Cerez Dosya"si yanlizca ilk anda gonderilen server tarafindan tekrar erisilebilirler.

  Istemci bilgisayar, "cerez dosyasi" kullanan bir web sitesini goruntulemeye calistigi zaman,Web Server istemci tarafa (ki bu genellikle kullanicinin browser programi olur) bir parca veriyi daha sonra kullanilmak uzere saklamasi icin verir.Bunun ardindan artik o veriden istemci taraftaki bilgisayar sorumludur."Cerez Dosyasi" destekleyen browserlar bu islemi, "cerez dosya"sini gonderen sitenin ismini dosya ismi olarak kullanarak yaparlar.

  Bu veriye yapilacak daha sonraki isteklerde buradan alinan bilgilerin bir kopyasi Web Server'a gonderilir.Bu veriler daha "cerez dosyasi" yaratilirken belirledigimiz omur sureleri dolana kadar istemci tarafin bilgisayarinda saklanir.Omur sureleri dolan "cerez dosyalari" sistemden silinirler.

  "Cerez dosya"lari yaratilirken server tarafi,istemci tarafa bu verileri ne kadar sure ile saklamasi gerektigini bildirir.Bu bildirim temel olarak "saniye" cinsinden bir rakam vermek suretiyle yapilir.

  Eger belirtilen sure "0" ise istemci bilgisayarda bu "cerez dosya"si kullanici browser penceresini kapatana kadar saklanir ve sonra hard disketen silinmesi suretiyle yok edilir.

  Elbette istemci tarafta saklanan veriler icin,server tarafindan bir kontrol soz konusu degildir.Bir defa yaratildiktan sonra server tarafindan bu dosyalar uzerindeki tum hakimiyet kaybolur.Kullanici bu dosyalarin icinde saklanan verileri degistirebilir,duzenleyebilir,silebilir veya tumunu oratadan kaldirabilir.Bu durumda, bir web prgramcisi olarak istemci taraftaki verilere supheci yaklasmak ve kritik olan verileri bu sekilde saklamak yolundan kendimizi ali koymak gereklidir.

  ONEMLI:Web Serverlar "cerez dosya"larini HTTP header olarak gondermektedir. Bu nedenle herhangi bir HTML ciktisi goruntulenmeden once istemciye gonderilmelidir.(Istemci tarafta ayni sekilde server istedigi zaman bu "cerez dosya" sini HTTP Header olarak gondermektedir.)

  Istemci taraf hangi "cerez dosya"sinin hangi web sitesinden geldigini bilmektedir.Bu nedenle eger www.php.net sitesini goruntuluyorsaniz kullandiginiz browser www.turk-php.com sitesinden alinmis bir "cerez dosya" sini asla bu siteye gondermeyecektir.

  PHP ve Cerez Dosyalari

  PHP en gelismis scripting dillerinden birisidir.Bu nedenle cok guclu bir "cerez dosyasi" destegi ile beraber gelmektedir."Cerez Dosyasi" degiskenlerini yaratmak icin setcookie () fonksiyonu kullanilmaktadir.Bu fonksiyon ayni header() fonksiyonunda oldugu gibi kullanicinin bilgisyarinda herhangi bir HTML goruntulenmeden once kullanilmalidir.

  setcookie () fonksiyonu nasil kullanilir?

  Bu fonksiyon toplam alti tane parametre almaktadir.bunlarda yanlizca ilk ucu en onemli olanlaridir.

- Degiskenin ad degeri

- Degiskenin sakladigi deger
- UNIX Timestamp (Olusturulan "cerez dosyasi" icin omur degeri.Saniye olarak.)

  Not: UNIX Timestamp integer olarak 01/01/1970 gece yarisindan baslayan ve verilen zaman araligina kadar gecen zamanin saniye olarak sayilmasidir.O andaki gecerli zamani bu formatta gormek icin time () fonksiyonunu kullanabilirsiniz.Eger simdi bulundugumuz andan itibaren 1 saat icinde omru bitecek bir "cerez dosyasi" yaratmak istersek bunu en kisa sekilde time ()+3600 yazarak saglayabiliriz.

  Diger uc parametre degeri genel olarak kullanilmamaktadir.Burada size bilgi olmasi acisindan aciklanmistir.

- "Cerez dosyasi" ile ilgili web sitesi icin tanimlanan yollar...Ornek vermek istersek eger bu parametreyi "/dorduncu/parametre/icin/yol/bir" olarak ayarlarsaniz sitenizden "/dorduncu/parametre/icin/yol/iki" sayfasi icin bu "cerez dosyasi" istemci tarafindan gonderilmeyecektir.

- "Cerez Dosya"sinin uygulanacagi "domain" adi degeri.Eger web Server birden fazla domain adina sahipse bu parametreyi kullanamak uygun olacaktir.

- Integer olarak "secure" degeri.1 olarak ayarlandigi zaman bu "cerez dosyasi" yanlizca SSL-sifrelenmis sayfadan istendigi zaman gonderilecektir."Cerez dosyasi" kullanici bilgisyarinda herhangi bir sifreleme kullanilarak saklanmaz.

  Tum bu bilgilerin isiginda bir ornek yapmak istersek,asagida yazacagimiz format genel olarak butun ihtiyaclariniza cevap verecek seviyededir.

  setcookie ("fontozellikleri", "", time()+3600);

  Yaratilan bu "cerez dosyasi" icinde saklanan verilere erismek,yukaridaki yaratma isleminde bile kolaydir.Cunku bu veriye ulasirken hic bir sey yapmaniza bile gerek YOKTUR.

  Butun POST degiskenlerinde oldugu gibi yanlizca adini yazip kullanmaniz yeterlidir.PHP otomatik olarak global domaine ait "cerez" degiskenleri ile ilgili degerleri yerlestirmektedir.Ornek vermek gerekirse "cerez dosyasi" icinde "fontozellikleri" ismi ile saklanan degisken,scriptler icinde global degisken olarak $fontozellikleri ismi ile kullanilabilir olarak hazir olacaktir.

  Cerez dosyasini nasil silerim?

  "Cerez Dosya"sini silmek icin bir kac yol bulunmaktadir.Elbette istemci bilgisayari kontrol eden kisi nereye bakmasi gerektigini biliyorsa her zaman icin bu dosyalari duzenleyebilir veya silebilir.Buradaki teknikler server tarafindan bu "cerez dosya" larini nasil sileceginize iliskin bilgileri icermeketedir.

- "Cerez dosya"sinin omrunu sifirlayin.Bunu yapmak icin gecmisteki bir tarihi vererek "cerez dosyasini" yeniden yaratamakta cerezi silmek icin kullanisli bir cozumdur...

  setcookie ("num", "0", time()-9999);

- "Cerez dosya"sini yanlizca degisken ismini belirterek tekrar yaratin.

  setcookie ("fontozellikleri");

  bu durumda "cerez dosyasi" gecersiz kabul edilecek ve silinecektir.

  Simdi ornek bir uygulama yapalim.

  1.Text editorunuzu acin ve asagidaki kodlari yazin.

  <?
  //cerezdosyasi_test.php

  //Once POST degiskenlerimizi kontrol ediyoruz.Buna bagli olarak cookie koyuyoruz.
  if ($tip_secim) setcookie ("font[tip]", $tip_secim, time()+3600);
  if ($boyut_secim) setcookie ("font[boyut]", $boyut_secim, time()+3600);

  //Font tipi ve boyutu icin HTML formunda kullanilmak uzere iki dizi hazirliyorum.

  $tipler = array ("arial","helvetica","sans-serif","courier");
  $boyutlar = array ("1","2","3","4","5","6","7");

  echo "<HTML><HEAD><TITLE>Cerez dosyalari icin ornek makale</TITLE></HEAD><BODY><DIV ALIGN='CENTER'>";

  //Burada iki tane liste kutusu yaratiyoruz.Kullanici font ve boyutu buradan seciyor.

  echo "<FORM METHOD=POST>";
  echo "Hangi yazi fontunu kullanmak istersiniz? ";
  echo "<SELECT NAME='tip_secim'>";
  echo "<OPTION SELECTED VALUE=' ' >Ongorulen</OPTION>";
  foreach ($tipler as $diziyilisteyekoy) echo "<OPTION>$diziyilisteyekoy</OPTION>";
  echo "</SELECT><BR><BR>";

  echo "Hangi yazi boyutunu kullanmak istersiniz? ";
  echo "<SELECT NAME='boyut_secim'>";
  echo "<SELECTED VALUE=' ' >Ongorulen</OPTION>";
  foreach ($boyutlar as $diziyilisteyekoy) echo "<OPTION>$diziyilisteyekoy</OPTION>";
  echo "</SELECT><BR><BR>";

  echo "<INPUT TYPE=SUBMIT>";
  echo "</FORM>";

  //Son olarak sonuclari ekrana yaziyoruz.Buradan kullanici sakladigi degerleri gorebiliyor.

  echo "Cerez dosyalariniz diyorki:<BR>";
  echo "<FONT ";
  if ($font[tip]) echo "FACE=$font[tip] ";
  if ($font[boyut]) echo "SIZE=$font[boyut] ";
  echo ">";

  echo "$font[tip] = $font[tip]<BR>";
  echo "$font[boyut] = $font[boyut]";

  echo "</FONT><BR>";

  echo "Form degiskenleriniz diyorki:<BR>";
  echo "<FONT ";
  if ($tip_secim) echo "FACE = $tip_secim";
  if ($boyut_secim) echo "SIZE = $boyut_secim";
  echo ">";
  echo "$tip_secim = $tip_secim<BR>";
  echo "$boyut_secim = $boyut_secim<BR>";
  echo "</FONT>";

  echo "</DIV></BODY></HTML>";

  ?>

  2.Bu dosyayi "cerez.php" olarak kayit edin.

  3.Browser ile sayfayi goruntuleyin.

  Ornek Dosyalar

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

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

  Her turlu gorus ve onerinizi simdi bu sayfanin altindaki "Bu konu hakkinda ne dusunuyorsunuz?" baslikla alana yazabilirsiniz.

  Serkan Hadi Ceylani
  serkan@turk-php.com

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