Ana Sayfa   Weblog   Realtime   Galeri   Arşiv   İletişim-Referanslar

Sayfa Yükleniyor...
blank
  Merhaba , kişisel weblog alanıma hoşgeldiniz...  
    setcookie() ile IE 'da zaman aşımı sorunu26 Nisan, Perşembe 2007  

 
 

setcookie() ile Internet Explorer 'da zaman aşımı sorunu

Geçenlerde 1 saat zaman aşımlı bir çerez yaratmam gerekti. Basitçe :

setcookie("deneme", "test", time()+3600, ".azizce.com");

şeklinde çerezi oluşturdum. Lokalde yaptığım farklı tarayıcı testlerinde sorun olmamıştı.Bende doğal olarak uzak sunucumda da bir problem olmayacağını düşündüm (Uzak sunucum ile kendi bilgisayarımda aynı PHP ve MySQL, phpmyadmin sürümlerini kullanırım) .Tarayıcı olarak Firefox kullandığım için uzak sunucumdaki sayfayı IE ‘da açana kadar problemin farkında değildim. Çerez bir türlü oluşmuyordu. Defalarca ve farklı zaman aşımı süreleriyle yaptığım testlerden sonra time()+3840 süresinin IE ‘da 1 dakikalık çerez oluşturduğunu gördüm. time()+3780 ise 0 "time()" değeriydi (  Yani sucular arası fark 1 saat 3 dakika). Kabaca çıkan sonuç şöyleydi:

time()+3840 => 1 dk.
time()+3900 => 2 dk.
time()+3960 => 3 dk.
time()+4020 => 4 dk.
time()+4080 => 5 dk.
........
time()+6600 => 47 dk. ( 6600-3780) / 60 = 47 dk.

Bir sevinçle php manual’e bunun çözümü için farklı tarayıcılarda farklı zamanlı çerezler oluşturan bir "çözüm" script ‘i koydum.

Ancak yanılmıştım. Çözüm benim için doğruydu, fakat herkes için değil.

PHP Developer(Geliştirici) olan bir arkadaş ile 3-4 kez e-posta laştıktan sonra. Sorunun lokal sunucumdaki zaman ve uzak sunucumdaki zaman farkı olduğunu gördüm. Siz de şu şekilde bunu öğrenebilirsiniz (bilmeyenler için):
// ver. > PHP 5.1

echo date("D M j G:i:s T Y", $_SERVER['REQUEST_TIME']);

// ver. < PHP 5.1

echo date("D M j G:i:s T Y", time() );

Bu küçük scripti hem kendi bilgisayarınızda hem uzak sunucunuzda (muhtemel bir hosting firması) çalıştırarak zaman farkınızı (eğer varsa) görebilirsiniz.

Daha sonra bu linkte (php bug sitesi) : http://bugs.php.net/bug.php?id=13116 değerli PHP güvenlik uzmanı ve geliştiricisi Chris Shiflet ‘ın benzer bir probleme cevap olarak 2002 Şubat ayında yazmış olduğu :

3) Time (in GMT) on the browser
4) Time (in GMT) on the server

maddelerinden yola çıkarak ben de 13116 numaralı bug ‘da aynı problemi yaşayanlar için bu çözümü gösterecek bir yorum yazdım. Aynı PHP Developer arkadaş ile yazışmamızda bu yorumun benzer sorunu yaşayan kişilere, kafalarını karıştırmadan net bir yanıt olacağını söyledi.

Sonuç:

Çerezleri uzun zaman aşımı gerektiren durumlarda kullanmak mantıklı olacaktır. Kısa zaman aşımı gerektiren durumlarda veritabanını kullanmak daha mantıklı olabilir.Eğer kısa zaman aşımları durumlarında mutlaka çerez kullanmamız gerekiyorsa, sık kullanılan tarayıclardan Internet Explorer ‘ı  göz önüne alıp (diğer tarayıcılarda böyle bir sorun oluşmamaktadır) lokal ve uzak sunucu zamanlarını kıyaslayıp buna uygun bir script yazmamız gerekmektedir. Örneğin, lokal ve uzak sunucu zaman aşımı 1 saat 3 dakika olan bir durumda:

if ( !isset($_COOKIE['cerezadi']) ) {
   
    // Eğer tarayıcı Internet Explorer ise
    if(stristr($_SERVER['HTTP_USER_AGENT'],"MSIE")) {
       
             // Zaman aşımını 47 dk. olarak ayarlıyoruz
             setcookie("cerezadi", "alihan cetin", time()+6600, "/", ".azizce.com");
   
        // Diğer tarayıcılarda örn: Firefox
        } else {
              // Zaman aşımını 47 dk. olarak ayarlıyoruz
             setcookie("cerezadi", "alihan cetin", time()+2820, "/", ".azizce.com");
        }
     
}

gibi bir script kullanabilirsiniz.

Yok illa setcookie() kullanmak istemiyorum derseniz, header() fonksiyonu yada ufak bir Javascript kodu da işinizi görecektir. Eğer header() fonksiyonu ile çerez yaratmayı tercih ediyorsanız php manual deki setcookie() fonksiyonuna eklenen yorumlardan yaralanabilirsiniz.

Alihan Çetin
(Webmaster)

 
     
  EkleBunu Sosyal Paylaşım Butonu
 
 



* Opsiyonel : Web Adresiniz
 
 
blank
#Sayfa Başı
Arama İpucu
blank
  Temel Kaynaklar
  •  Giriş
  •  Üyelik
  •  
  • Arşiv Arşiv
  • RSS 2.0 RSS
  • Smart RSS Smart RSS
  •  
  •   Add to Technorati Favorites
blank
  Kategoriler
blank
  Tavsiye Linkler