• 05-06-2015, 11:09:44
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    analytics her ne kadar bunu yapıyor olsada zırtpırt oraya gir o linki tıkla buna bak uğraşmak yerine belirgin 5-6 istatistiği kendi adminimde görmek için böyle bir işe kalkıştım.

    <?
    require_once('baglanti.php');
    
    // ip bulma fonksiyonu
    function GetIP()
       {
          if(getenv("HTTP_CLIENT_IP")) 
          {
             $ip = getenv("HTTP_CLIENT_IP"); 
          } 
          elseif(getenv("HTTP_X_FORWARDED_FOR")) 
          {
             $ip = getenv("HTTP_X_FORWARDED_FOR");
             if (strstr($ip, ',')) 
             {
                $tmp = explode (',', $ip); $ip = trim($tmp[0]); 
             } 
          } 
          else 
          { 
             $ip = getenv("REMOTE_ADDR"); 
          } 
          return $ip;
       } 
    $visitor_ip = GetIP();
    
    $visitor_request_url =$_SERVER['REQUEST_URI'];
    
    $visitor_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); 
    
    $today_date=time();
    		
    $visitor_agent= $HTTP_USER_AGENT;
    
    if (isset ( $_SERVER['HTTP_REFERER'] ) )
    	{
    		preg_match('@^(?:http://)?([^/]+)@i', $_SERVER['HTTP_REFERER'], $matches);
    		$visitor_referer = $matches[1];
    
    		$sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','$visitor_referer','$visitor_lang','$visitor_agent')");
    		
    	}else{
    		
    		$sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','direk','$visitor_lang','$visitor_agent')");
    		}
    
    ?>
    şeklinde kodlarım var. gidişatından da anlaşılacağı üzere ip buluyorum, bir kaç detay öğreniyorum ve ardından kimin aracılığı ile girdiğini öğrenmeye başlıyorum. bir site üzerinden geldiyse veritabanıma gönderen site yok adres satırına yazıp geldiyse de direk olarak işlemi tamamlıyorum.

    Problem şu, bir ziyaretçi yahoo dan arama yaptı bir link buldu, tıkladı ve siteme geldi. $_SERVER['HTTP_REFERER'] veritabanıma yahoo olarak işleniyor. Ama sorun şu; bu ziyaretçi benim sitemde başka bir sayfaya girdiğinde bu kez $_SERVER['HTTP_REFERER'] değeri benim site adresim oluyor (haliyle bu yaptığı da doğru).

    Ben bu aşamada bu ziyaretçi bir $_SERVER['HTTP_REFERER'] değerinden geldikten sonra oturumu sonlanana kadar (mesela 20dk lık bir timeout süresinde) aynı değeri kaydetsin istiyorum ki gelen x bir siteden gelen ziyaretçinin izini sürebileyim.

    Bunu ilk $_SERVER['HTTP_REFERER'] değerini session a aktararak yapmayı denedim ama başarılı olamadım

    Güzel bir fikri, örnek bir kodu ya da uygulaması olup da paylaşabilecek arkadaşlara sesleniyorum çözüm önerisi olan?
  • 05-06-2015, 13:06:12
    #2
    Hiç mi hiç önermem. Ne bi VPS nede Dedicated dayanabilir buna hele ki baya bi yüklü hiti varsa sitenin, Hiç bulaşma derim.
  • 05-06-2015, 13:15:54
    #3
    wrecking adlı üyeden alıntı: mesajı görüntüle
    Hiç mi hiç önermem. Ne bi VPS nede Dedicated dayanabilir buna hele ki baya bi yüklü hiti varsa sitenin, Hiç bulaşma derim.
    haklısın ama hem çok ciddi bir hit yok hem de şimdilik sunucum vps (kendi fiziksel sunucuma da heran geçebilirim) bu boyutta bir işi vps kaldırabilir diye düşünüyorum.

    en azından çözüm bulayım çalıştırayım baktım zorluyo silerim gider ama böyle birşey yapmaya çalışana da hazır kod olur
  • 05-06-2015, 13:54:52
    #4
    yaptığın doğruda yapamadığın noktadaki kodları yazarsan daha iyiolur muhtemelen değişken kaydı yaparken problem oluyor.
  • 05-06-2015, 14:32:02
    #5
    aerginer adlı üyeden alıntı: mesajı görüntüle
    yaptığın doğruda yapamadığın noktadaki kodları yazarsan daha iyiolur muhtemelen değişken kaydı yaparken problem oluyor.
    şimdi de cookie ile denedim

    <? 
    require_once('baglanti.php'); 
    
    // ip bulma fonksiyonu 
    function GetIP() 
       { 
          if(getenv("HTTP_CLIENT_IP"))  
          { 
             $ip = getenv("HTTP_CLIENT_IP");  
          }  
          elseif(getenv("HTTP_X_FORWARDED_FOR"))  
          { 
             $ip = getenv("HTTP_X_FORWARDED_FOR"); 
             if (strstr($ip, ','))  
             { 
                $tmp = explode (',', $ip); $ip = trim($tmp[0]);  
             }  
          }  
          else  
          {  
             $ip = getenv("REMOTE_ADDR");  
          }  
          return $ip; 
       }  
    $visitor_ip = GetIP(); 
    
    $visitor_request_url =$_SERVER['REQUEST_URI']; 
    
    $visitor_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);  
    
    $today_date=time(); 
             
    $visitor_agent= $HTTP_USER_AGENT; 
    
    $_COOKIE["referans"]=$_SERVER['HTTP_REFERER'];
    $referanslar=$_COOKIE["referans"];
    
    setcookie ("referans", "", time() - 600);
    
    if (isset ( $referanslar ) ) 
        { 
            preg_match('@^(?:http://)?([^/]+)@i',$referanslar, $matches); 
            $visitor_referer = $matches[1]; 
    
            $sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','$visitor_referer','$visitor_lang','$visitor_agent')"); 
             
        }else{ 
             
            $sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','direk','$visitor_lang','$visitor_agent')"); 
            } 
    
    ?>
    şeklinde. arama motorundan girince motorun bilgisini ekliyor ama sonra yeni bir linke tıklayınca yine siteminadi.com seklinde giriyor.

    muhtemelen her seferinde yeni cookie atıyor anlamadım
  • 06-06-2015, 16:15:02
    #6
    $_SERVER['HTTP_REFERER'] bir süper global değikendir. hep bir önceki sayfanın adresini verir. ama sen diyorsun ki bir kere versin. o zaman şunu yapmalısın birde oturum değişkeni kaydet. onu ayrı bir kolona kaydet. ilk gelinen sayfa senin site adresinden farklı ise ona kaydetsin. oturum boyunca o değişkeni saklasın. ip adresini de zaten alıyorsun. tarih ve saati tam olarak kaydet. ip ve giriş zamanına göre kayıtları listelersen istediğin gene olur.
  • 06-06-2015, 17:39:20
    #7
    Tum hareketleri kaydediyorsun zaten. IP'e ait datebasedeki ilk veri(ilk hareket = siteye ilk giris)'nin referans sutunu sorunun cevabi. Admin panelinde listelerken gosterebilirsin.
  • 06-06-2015, 19:30:04
    #8
    direk google analytics apilerini sayfana gömsen daha kolay olmaz mıydı hem sunucunu da yormazdın.
  • 06-06-2015, 23:22:11
    #9
    Şöyle bir çözüm buldum ki ne kadar mantıklı bilemedim ama en azından çalışıyor.

    $sorgu= mysql_query("SELECT * FROM Ziyaretci WHERE ip ='$visitor_ip' ORDER BY tarih DESC LIMIT 1 ");
    
    		$sayi=mysql_num_rows($sorgu);
    		$veri=mysql_fetch_array($sorgu);
    		$eski=$veri['referans'];
    		$giris=$veri['tarih'];
    		
    		if ($sayi==1 && $giris > ((time())-1500) )
    			{
    			$sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','$eski','$visitor_lang','$visitor_agent')");
    			}else{
    			$sql=mysql_query("INSERT INTO Ziyaretci VALUES (NULL,'$visitor_ip','$today_date','$visitor_request_url','$visitor_referer','$visitor_lang','$visitor_agent')");
    			
    			}
    aynı ip nin son hareketini buluyorum 25 dakikalık dilimde sayfalarda gezindimi ilk geldiği siteyi yazdırıyorum 25 dakikayı geçerse yeni $visitor_referer neyse onu yazdırıyorum.