PHP'de COOKIE İŞLEMLERİ

'HTML-PHP-ASP-JAVA' forumunda semyav5mitq tarafından 13 Ocak 2009 tarihinde açılan konu

  1. Sponsorlu Bağlantılar
    PHP'de COOKIE İŞLEMLERİ konusu Şu ana kadar formlar için bilgi alma mekanizması olarak browserin adres satırından bilgi aldık ve kaydettiğimiz dosyalardan bilgi alıkŞu anda cookie lerden bilgi almaya başlayacağızBu cookielerin "çerez" ne işe yaradıklarını bu siteden bir örnek yardımıyla açıklayacağız
    Mesela bu kullanıcı kayıt sistemi yaptınız ve kullanıcıları bir veritabanında topladınızBu kullanıcılar login olduklarıda sadece bir tek sayfaya gireceklerOda login olunan sayfayaBu işi daha da ilerletmek için yani kullanıcının değişik sayfalarda da gezinmesini isteyebilirizTabii bu işi hidden gizli HTML takılarıyla yapmamız mümkün ama bu güvenlik açısından iyi bir yöntem değildir
    Cookie'lerin çalışma sitillerini kısaca açıklamak gerekirse; php programını çalıştıran bir kullanıcının bilgisayarına bir adet txt uzantılı metin dosyası atılırBu dosyayı gerektiğinde sadece bu cookie yi atan program okuyabilir
    Cookie'lerin yaşama şanslarınıda programcı belirleyebilirİsterse bir ay boyunca cookie kişisel bilgisayardan silinmezİsterse 10 dakika sonra cookie browser tarafından silinirCookie'ler Windows işletim sisteminde Windows dizininin altında bulunan cookie klasöründe toplanırlar"C:\Window\Cookie\" Bu cookieleri nerelerde kullanabiliriz diye sorarsak?
    Yukarda da söylediğimiz gibi kullanıcı kayıt scriptlerinde, anketlerde yapmış olduğumuz seçenekleri bir ziyaretçinin sadece bir seçeneğe oy verebilmelerini sağlama, sayaçlarda siteyi ziyaret eden kişilerin sürekli olarak browserin yenile "Refresh, F5" butonunu tıklayıp sayacımızın artmasını engelleyebilirizCookie'lerin atılması şöyle olur:

    setcookie("bilgisayara giden cookienin başlığı","cookie değeri", time() , "/" );

    Cooikie'ler görüldüğü gibi setcookie komutu ile gönderiliyorBu komutu biraz açarsak; bu komutun içerisine ilk değer cookie nin adını teşkil etmektedirİkinci değer ise buraya genellikle bir değişken konur cookie nin değeri girilirÜçüncü kısmında ise cookie nin bilgisayarda kalacağı süreyi belirliyoruzBurada time komutuyla birlikte sayı değeri girerizBildiğiniz gibi time() komutu saniye cinsinden zamanı verirŞimdi bir cookie denemesi yapalım

    setcookie("Aspetonline", "PHP", time()+600, "/");

    Burada biz Aspetonline adında vir cookie yi PHP değeriyle 600 saniye uyarınca yani 10 dakika boyunca web sayfamızın kök dizinine işe yarayacak bir cookie attıkBu cookie yi mesela http://localhost/cookiephp adında bir dosyadan attıkBu http://localhost adresinden itibaren kulllanılırEğer bir üst klasörden itibaren kullanılmak isteniyorsa son değişkene "/klasör_adi" gibi klasör isimlerini koyabiliriz

    setcookie("CGI", "anket", time()+3600*24, "/anket");

    Burada da CGI adında bir cookie gönderdikDeğerini anket yaptıkZaman kısıtlamasını time komutuna önce 3600 yani 1 saat yaptıkSonrada çarpı 24 yaparak cookie nin süresini 24 saat olarak belirledikDaha sonrasında da anket klasöründe geçerli kıldık
    Peki bu cookie leri nasıl okuruz diye sorulduğunda şu cevabı veririz $HTTP_COOKI_VARS[cookieninadi] değişkeni ile cookieleri okutmamız mümkünBir örnek verelimYukardaki örnekleri eğer çalıştırdıysanız şu komutu çalıştırın

    print $HTTP_COOKIE_VARS[Aspetonline];

    Bu komutu çalıştırdığınızda karşınıza PHP yazısı çıkacaktırYine dizi değişkenine anket yazarsanız bu sefer karşınıza anket yazısı çıkacaktırAma şu ayrıma dikkat etmeniz gerekirCookie'yi hangi server adıyla gönderdiyseniz o server adıyla okutabilirsinziYani kişisel bilgisayarınızda bu cookie leri çalıştırdığınızda 3 değişik adres vardırBunlar http://localhost http://127001 ve http://adınız Bu adınız değişkenlidirBunu Denetim masasında bulunan ağ simgesindeki tanımlamadaki bilgisayarın adı girer ve istendiğinde değiştirilebilirBu adreslerden herhangibiriyle atılan cookie diğer adreslerle okunamazZaten cookie lerin içerisini atığınızda şöyle bir yazıyla karşılaşırsınız:

    Aspetonline
    PHP
    mehmet/
    128
    182249344
    29446161
    1995417792
    29433923
    *

    Burada ilk satır cookie nin adını, 2 satır cookie nin değerini, 3 satırda cookie nin hangi klasörde geçerli olacağını gösterirDiğer satırlar da ise cookie nin geçerlilik zamanını, atılış zamanını saniye cinsinden yazarBunlar sizi ilgilendirmezŞimdi bir örnek vererek bu bahsi kapayalım

    <? //loginphp
    if($kullanici_adi=="admin" && $sifre=="sifre" ){
    setcookie("kullanici", "admin", time()+3600, "/")
    print "Şu anda şifreli alandasınız";
    }
    else{
    print "Kullanıcı adı veya şifreniz yanlış";
    }
    ?>
    <? // diğer şifreli sayfalarda kullanılabilecek kod
    if(!$HTTP_COOKIE_VARS[kullanici]=="admin"){
    print "Siz şuanda login değilsiniz";
    }
    else{
    //Buraya login olan kullanıcıların görmesini istediğiniz sayfayı giriniz
    }
    ?>


    Cookie'ler de gerekli olan güvenlik önlermlerini sıralamamız gerekirse: Eğer yukardaki gibi kullanıcı kaydı yaptığınız sitelerde cookie nin süresini kısıtlı tutmalısınızSiteden çıkış yapan bir bölüm eklemelisinizBuda cookie yi silme anlamına gelirCookie gerçi program tarafından silinmez ama öldürülebilirYani içerisine ilk atanan değeri değiştirerek öldürebilirizBunuda cookie nin içerisinde bulunan 2 değeri mesela boş bırakabilirisniz

    setcookie("kullanici", "", time()+3600, "/")

    Burada benim kullandığım yöntemi kullanarak cookie nin içerisine 3 nokta koyabilirisnizCookielerde bir güvenlik önlemide cookie lein içerisine asla ve asla kullanıcı bilgileri koymamanızdırBunun yerine uzun karakterli tercihen 32 karakterli rasgele şifre kullanarak bu şifreyi sınatmanızdırBu rasgele şifre yapmanın yöntemi de:

    $resgele = md5 (uniqid (""));
    $random = substr ("$rasgele", 0, 32);


    Burada ki gibi random değişkeni her seferinde 32 karakterli bir şifre üretecektirBu tür şifre kullanmamızın nedeni: Mesela bir kullanıcı internet kafeye giderek sizin sitenize girdi ve login olduSonrada çıkış butonunu tıklamadan kafeden ayrıldıBunun üzerine bir başka kullanıcı bu bilgisayara girip C:\Windows\cookie\ klasöründen güvenlik önlemi alınmadan gönderilen cookie ye bakar ve içerisinde kullanıcı adı ve şifrenin girildiğini görür ve sitenize bu kişide giriş yaparBunun için asla cookie lerin içerisine kullanıcı bilgilerini girmeyiniz
     

Bu Sayfayı Paylaş