|
cookieler
Jul 23,2007 00:00
by
mustaYfa
Bu belgede sizlere PHP ile Cookie yönetiminin nasıl yapılacağını anlatacağım. Cookie'ler nedir? Ne işe yarar? Cookie'ler web server tarafından üretilen bilgi parçalarıdır ve client bilgisayara kaydedilirler. Cookie'ler HTML kod içine gömülüdür ve server-client arasında gidip gelirler. Client'ınız sizin web browser'ınızdır (örneğin Netscape, Lynx). Server ise web sayfasının bulunduğu makinenin web serveri. (örneğin cclub.ktu.edu.tr ın 80 no'lu portta çalışan web server'i Apache) Cookie'ler kişiye özel web sayfası yapmak, sayaç yapmak ve browse yapılırken veri kaydetmek, istatistik tutmak gibi işlerde kullanılır. Cookie'ler ve PHP PHP ile cookie'ler kullanmak oldukça kolaydır. SetCookie fonksiyonu kullanılarak cookie setlenir. Cookie'ler HTTP header'in bir parçasıdır, bu nedenle SetCookie fonksiyonu, browser'a henüz hiçbir çıktı gönderilmeden çağrılmalıdır. Bu diğer header fonksiyonları için de geçerli olan kuraldır. Client'tan size herhangi bir cookie gönderildiği zaman otomatik olarak bir PHP değişkeni olarak dönecektir size. PHP header'ı 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 değerini "baris" yapacaktir. SetCookie'nin tam yapısı şöyledir: setcookie(string CookieAdi, string CookieDegeri, int CookieBitisZamani, dizin, domain, int guvenlik); DIZIN : Bu cookie icin web server altındaki 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 setlenmesi 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 load edilene kadar cookie visible 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 silmeden önce başka bir tane ekleyin. Uygulamalar Şimdi düşünün ki bir siteyi üye olmaya açacağız. Otomatik olarak kullanıcı tanınacaktır. Veri tabanı olarak mysql kullanacağım. Küçük bir veri tabanı oluşturup ad, soyad, email ve ziyaretçi sayısı bilgilerini tutacağım. 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 $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); //setting new cookie echo"
Hello $FirstName $LastName, this is your visit number: $count
Your email address is: $email
"; mysql_connect() or die ("Problem connecting to DataBase"); //update DB $query = "update info set count=$count where FirstName='$FirstName' and LastName='$LastName' and email='$email'"; $result = mysql_db_query("users", $query) or die ("Problems .... "); } //End Existing cookie instructions else { //Begin inctructions for no Cookie echo "
Click Here for Site Registration
"; } //End No Cookie instructions ?> Eğer MySQL server'i uzaktan kullanıyorsanız mysql_connect() fonksiyonunu şu şekilde kullanın: mysql_connect ("server","username","password") or die ("Problem connecting to DataBase"); isset() fonksiyonu yardımıyla eğer istediğimiz cookie'ler varsa bunların PHP'ye değişken olarak gelmesini sağlıyoruz. ... } else { // Cookie yoksa işletilecek komutlar ... } Bizim örnekte eğer cookie varsa sayaç bir artırılacak ve kullanıcıya ait bilgiler ekrana basılacak. Eğer cookie yoksa üye olmasını isteyeceğiz. explode() fonksiyonu, bir ayıraçla ayrılmış elemanları string dizisi olarak atar. Böylece cookie içindeki veriler elde edilir. Bizim örneğimizde bu string '&' ayıraçı 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 ayıraç, diğeri cookie ismidir. Okuduğumuz cookie'nin elemanlarına yeni değerler setleyebiliriz. Örneğimizde: $counter++; ile sayaçı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); //setting a new cookie Yukarki iki satırda: Önce CookieString'imiz güncellenmiş değerlerle oluşturuluyor. Ayıraç olarak yukardaki PHP kodla uyumlu olması için '&' kullandım. Daha sonra güncellenmiş bilgileri cookie olarak browser'a gönderiyorum. Sonra MySQL kullanarak yeni sayaç değerini kendi server'ımda veri tabanına yazıyorum. mysql_connect() or die ("Problem connecting to DataBase"); //update DB $query = "update info set count=$count where FirstName='$FirstName' and 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:
Registering the site
| User Name: | maxlength=20> |
| Last Name: | maxlength=40> |
| email addrress: | maxlength=40> |
|
Burada bir form ile adı, soyadı ve email bilgisi alınır. Register etmek için bu bilgiler reg1.php3 scriptine postalanır. reg1.php3: if ($FirstName and $LastName and $email) { mysql_connect() or die ("Problem connecting to DataBase"); $query="select * from info where FirstName='$FirstName' and 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 " user $FirstName $LastName already exists. Using the existing info. "; echo " Back to Main Page"; } 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 "Thank you for registering. "; } } else { echo "Sorry, some information is missing. Please go back and add all the information"; } ?> Kişinin bilgileri veri tabanına MySQL ile yazılıyor. Cookie ilk kez oluşturulup karşı makineye yazılıyor. |