E-DERSANE.com - PhP Offline Dersleri

PHP ve Cookie Kullanımı

Bu yazıda sizlere PHP ile Cookie yönetiminin nasıl yapılacağını anlatacağım.

Cookie`ler nedir? Ne işe yarar?

Cookie'ler web sunucusu tarafindan üretilen bilgi parçalarıdır ve client bilgisayara kaydedilirler. Cookie'ler HTML kod içine gömülüdür ve server-client arasinda gidip gelirler. Client'iniz sizin web tarayıcınızdır (örneğin Netscape, Lynx). Sunucu ise web sayfasının bulunduğu makinede çalışan programdır. (örneğin cclub.ktu.edu.tr in 80 no'lu portta çalışan web sunucusu Apache)

Cookie'ler kişiye özel web sayfası yapmak, sayaç yapmak, sörf yapılırken veri kaydetmek, istatistik tutmak gibi işlerde kullanılır.

Cookie`ler ve PHP

PHP ile cookie kullanmak oldukça kolaydır. SetCookie fonksiyonu kullanılarak cookie yaratılır. Cookie'ler HTTP header'in bir parçasıdır, bu nedenle SetCookie fonksiyonu, tarayıcıya öncesinde hiçbir çıktı gönderilmeden çağrılmalıdır. Bu diğer header fonksiyonlari için de geçerli olan kuraldır. Client'tan size herhangi bir cookie gönderildiği zaman sunucuda otomatik olarak bir PHP değişkeni yaratılır. PHP header'i alıp parçalar (parse eder), cookie isimlerini açar ve bu isimleri değişkenlere atar. Mesela SetCookie ("isim","baris") şeklinde bir cookie kullanılırsa PHP otomatik olarak $isim diye bir değişken oluşturup bu değişkenin değerini "baris" yapacaktır. SetCookie'nin tam yapısı şöyledir :

setcookie (string CookieAdı, string CookieDeğeri, int CookieBitişZamanı, dizin, domain, int güvenlik); Dizin: Bu cookie için web server altındakı dizin. Default değeri istenilen sayfanın bulunduğu dizindir.

Domain: Bu cookie'nin kullanılabileceği domain ismi. Default olarak istenilen web sayfasının domain'idir. DOMAIN kısmı iki adet "." içermelidir. ".domainismi.com" şeklindedir.

SECURE: "1" e eşitlenmesi cookie'nin sadece güvenlikli bir HTTPS bağlantı ile transfer edilebileceğini gösterir.

Şunu unutmayın ki, cookie'nin görülebileceği bir sayfa yüklenene kadar cookie görünür olacaktır. Aynı script içerisinde birden fazla SetCookie kullanılırsa ters sırada gerçekleştirilecektir. Eğer bir cookie'yi silmek istiyorsanız değer olarak boş değer vermelisiniz.

Uygulamalar

Şimdi düşünün ki bir siteyi üye olmaya açacağız. Kullanıcının otomatik tanınmasını istiyoruz. Veri tabanı olarak MySQL kullanacağız. Küçük bir veri tabanı oluşturup ad, soyad, email ve ziyaretçi sayısı bilgilerini tutacağız.

mysql> create database users; Query OK, 1 row affected (0.06 sec) mysql> use users; Database changed mysql> create table info (FirstName varchar(20), LastName varchar(40), email varchar(40), count varchar(3)); Query OK, 0 rows affected (0.05 sec) Şimdi cookie'leri kontrol edecek ve veri tabanı ile karşılaştıracak PHP kodu yazalım.

<!--- Index.php3 ---> <?php if (isset($Example)) { // Cookie mevcutsa yapilacaklar $info = explode("&", $Example); $FirstName = $info[0]; $LastName = $info[1]; $email = $info[2]; $count = $info[3]; $count++; $CookieString = $FirstName . '&' . $LastName . '&' . $email . '&' . $count; SetCookie ("Example", $CookieString, time() + 3600); // cookie yenileniyor echo " <html> <title>Cookie Örnegi</title> </head> <body> <p>Merhaba $FirstName $LastName, siteyi {$count}. kez ziyaret edisiniz.</p> <p>Your email address is: $email</p> <body> <html>"; mysql_connect() or die ("Veritabanina baglanilamadi."); // Veritabanini güncelle $query = "UPDATE info SET count=$count WHERE FirstName='$FirstName' AND"; $query .= "LastName ='$LastName' AND email='$email'"; $result = mysql_db_query("users", $query) OR die ("Veritabaninda problem..."); } else { //Cookie ilk kez atiliyorsa yapilacaklar echo " <html> <head> <Title>Cookie Örnegi</title> </head> <body> <a href=\"reg.php3\">Siteye kayit olmak için tiklayin.</a> </body> </html>"; } ?>Eğer MySQL server'ı uzaktan kullanıyorsanız, mysql_connect() fonksiyonunu şu şekilde kullanın :

mysql_connect ("server","username","password") OR die ("Veritabanına baglanılamıyor");isset() fonksiyonu yardımıyla eğer istediğimiz cookie'ler varsa bunların PHP'ye değişken olarak gelmesini saglıyoruz :

<? if (isset($Example)) { // Cookie olmasi durumunda isletilecek komutlar ... } else { // Cookie yoksa isletilecek komutlar ... } ?>Bizim örnekte eger cookie varsa sayaç bir artırılacak ve kullanıcıya ait bilgiler ekrana basılacak. Eger cookie yoksa üye olmasını isteyeceğiz. explode() fonksiyonu, bir ayraçla ayrılmış elemanları string dizisi olarak atar. Böylece cookie içindeki veriler elde edilir. Bizim örneğimizde bu string '&' ayraçı ile ayrılmış adı, soyadı, emaili ve sayaç değerlerini tutar. Kullanımı aşağıdaki gibidir:

$info = explode("&", $Example);$info[0], $info[1], $info[2], $info[3] şeklinde cookie'mizin elemanlarına ulaşırız. Görüldüğü gibi explode() fonksiyonunun parametrelerinden biri ayraç, diğeri cookie ismidir. Okuduğumuz cookie'nin elemanlarına yeni değerler verebiliriz. Örneğimizde : $counter++; ile sayacımızı artırıyoruz. Güncellenmiş bilgileri yazmak için yeni bir cookie oluşturuyoruz.

$CookieString = $FirstName . '&' . $LastName . '&' . $email . '&' . $count; SetCookie ("Example", $CookieString, time()+3600); // yeni cookie yaratiliyorYukardaki iki satırda : Önce CookieString'imiz güncellenmiş değerlerle oluşturuluyor. Ayraç olarak yukardaki PHP kodla uyumlu olması için '&' kullandım. Daha sonra güncellenmiş bilgileri cookie olarak tarayıcıya gönderiyorum. Sonra MySQL kullanarak yeni sayaç değerini kendi sunucumda veritabanına yazıyorum :

mysql_connect() or die ("Problem connecting to DataBase"); // Veritabanini güncelle $query = "UPDATE info SET count=$count WHERE FirstName='$FirstName' and $query .= "LastName='$LastName' and email='$email'"; $result = mysql_db_query("users", $query) OR die ("Problems .... "); Eğer cookie yoksa kişi register olmadı demektir. Register olması için reg.php3 scripti çağrılıyor :

<!--- reg.php3 ---!> <html> <head><title>Siteye Kayit</title> </head> <body bgcolor=#ffffff> <h1>Siteye Kayıt</h1> <form method="post" action="reg1.php3"> <table width=90% align=center> <tr> <td>Kullanici Adi:</td> <td><input type=text name='FirstName' size=20 maxlength=20></td> </tr> <tr> <td>Isim:</td> <td><input type=text name='LastName' size=40 maxlength=40></td> </tr> <tr> <td>E-Posta Adresi:</td> <td><input type=text name='email' size=40 maxlength=40></td> </tr> <tr> <td></td> <td><input type=submit value="Click to Register"></td> </tr> </table> </form> </body> </html> Buradan bir form ile adı, soyadı ve e-posta bilgileri alınır. Kayıt etmek için bu bilgiler reg1.php3 scriptine postalanır :

<!--- reg1.php3 ---!> <?php if ($FirstName AND $LastName AND $email) { mysql_connect() OR die ("Veritabanına baglanilamiyor."); $query = "SELECT * FROM info WHERE FirstName='$FirstName' AND "; $query .= "LastName='$LastName' AND email='$email'"; $result = mysql_db_query("users", $query); $r = mysql_fetch_array($result); $count = $r["count"]; if (isset($count)) { $CookieString = $FirstName . '&' . $LastName . '&' . $email . '&' . $count; SetCookie ("Example",$CookieString, time()+3600); echo "<p>$FirstName $LastName zaten mevcut. Varolan bilgiler kullanilacak.</p>"; echo "<p><a href=\"index.php3\">Ana Sayfaya Dön</a>"; } else { $count = "1"; $query = "insert into info values ('$FirstName','$LastName','$email','$count')"; $result = mysql_db_query("users", $query); $CookieString = $FirstName . '&' . $LastName . '&' . $email . '&' . $count; SetCookie ("Example",$CookieString, time()+3600); echo "Kayıt olduğunuz için teşekkürler.<br>"; } } else { echo "Forma girilen bilgiler eksik, lütfen geri dönüp bütün alanlari eksiksiz doldurun."; } ?>Kişinin bilgileri veritabanına MySQL ile yazılıyor. Cookie ilk kez karşı makinede oluşturuluyor. Böylece ilk cookie'mizi yarattık ve nasıl yöneteceğimizi öğrendik... Sizler de bu kodları geliştirip kendi uygulamalarınızda kullanabilir ve programlarınıza cookie'lerin sağladığı avantajları ekleyebilirsiniz...

Copyright © 2001- www.E-Dersane.com - Offline Dersler. All Rights Reserved. PhP Offline Dersleri bolumunde yayinlanan bütün metin ve makaleler GPL lisansli olup ayrintili bilgi için GNU.org adresine bakiniz. |