merhabalar;
elimde 100 sayfadan oluşan bi site var.. her bir sayfanın kendine ait hitini hesaplamak istiyorum.. ancak sadece tekil kullanıcıları hesaplamak istiyorum.. birisi sayfayı refresh yapsa sayılmasın istiyorum.. PHP ile nasıl bişe yapabilirim bunu engelleyecek..?
aklıma ilk gelen yöntemler; cookie atmak ya da ip adreslerini kaydetmek.. ama cookie kolay aşılabilir.. günde 1000lerce ziyaretçisi olan bi sitede her sayfa için tek tek ip leri db ye kaydetmek de ne kadar akılcı olur bundan da emin değilim..
bi fikir verebilir misiniz bana?
refresh sahtekarlığının önüne geçebilmek için..
13
●949
- 04-09-2008, 02:30:19sayacturka gibi sitelerden sayaç kodu alarak sitelerinize yerleştirirseniz söylediklerinizden daha çok gelişmiş istatistiklere ulaşabilirsiniz. ama kendim php ile kodlayacağım diyorsanız.
Anlatım:
Öncelikle db nizde ip ve hit adında 2 tane tablo oluşturun.
hit tablosunda hit alanı olsun. ip tablosunda ip ve zaman alanı olsun.
Hit alanı int diğer alanları text yapabilirsiniz.
sayac.php
<?php mysql_connect("localhost", "KULLANICI ADI", "ŞİFRE"); mysql_select_db("VERİTABANI ADI"); $ziyaretci_ip = $_SERVER['REMOTE_ADDR']; $zaman = time() + 86400; $simdi = time(); $sorgu = mysql_fetch_array(mysql_query("SELECT * FROM ip WHERE ip='$ziyaretci_ip'")); if (empty($sorgu['ip'])) { mysql_query("INSERT INTO ip (ip, zaman) VALUES ('$ziyaretci_ip', '$zaman')"); mysql_query("UPDATE hit SET hit='hit+1'"); }else{ if($simdi>=$sorgu['zaman']) { mysql_query("UPDATE hit SET hit='hit+1'"); mysql_query("UPDATE ip SET zaman='$zaman' WHERE ip='$ziyaretci_ip'"); } } ?>bundan sonra bütün sayfalarınıza;
<?php include("sayac.php"); ?>ile include edip kullanabilirsiniz. ama 100 sayfa çok ondan dolayı, önce bir kaç sayfaya ekleyip denemeniz iyi olur.
tekil hitlerinizi hit tablosundaki hit alanından öğrenebilirsiniz.
bu yazdığım script sadece günlük olarak ip leri kontrol eder.Yani 1 gün sonra aynı ip girerse hiti 1 arttırır. ama gün içerisinde aynı ip li kişi girerse hitte artma olmaz.
biraz aceleylen yazdım birazdan sahura gidecem kafa fazla yerinde değil. hata olursa buraya belirtirsiniz.
Umarım işine yarar kolay gelsin.
Saygılarımla;
Yaşar Kemal DAĞ - 04-09-2008, 02:41:34çok teşekkür ederim sayın Yaşar Kemal DAĞ.. şu an deneme imkanım yok zira bu olay, henüz başlamadığım ama başlamayı düşündüğüm bir proje için kafama takılan bir husustu..
eminim çalışacaktır..
birşey daha sormak istiyorum; bu verdiğiniz kodda her bir sayfa için ayrı ayrı tablo oluşturmam gerekicek sanırım, birde veritabanına girilen ip adresleri 1 gün sonra silinecek mi? görebildiğim kadarıyla orda kalmaya devam edecek.. ziyaretçisi yüksek bir sitede bu veritabanı gitgide çok şişmez mi?
PHP de biraz yeniyim, sorularımı mazur görün..
tekrar teşekkürler.. - 04-09-2008, 03:04:06NaCReS adlı üyeden alıntı: mesajı görüntüle
eğer sitenin toplam tekilini almak istiyorsanız her sayfa için tek tek tablo oluşturmanıza gerek yok.
sadece her sayfaya include kodunu yerleştirmeniz yeterli.
evet kodlarda sildirmedim isterseniz alttaki if yapısı içerisinde ufak bir mysql sorgusuyla sildirebilirsiniz o sorun değil ama bu sayac.php her gelen ziyaretçi için çalışıyor. sildirmek isterseniz tüm dbdeki tüm ipleri db den çekip zamanlarını kontrol edip sildirmek gerek.bu sistem while döngüsüyle çalıştığı için eğer çok hitli bir site ise buda sistemi çok kasacaktır.hatta server loadı bile uçurabilir. bunun yerine db şişmesi daha iyi bir olay. en iyi temizlik yolu bir temizle.php oluşturursunuz. o dosya içerisinde tüm dbdeki kayıtların zamanlarını inceletip 1 günden fazla girmeyenleri db den silersiniz. cpanelden cron job ile gecenin bir saatini zaman ayarı olarak verirsiniz her gün 1 kere gece o dosya çalışır. böylelikle gece fazla yoğun olmayacağı için serverı çok kasmaz ve günlük temizlik işlemi 1 kere yapılmış olur. - 04-09-2008, 03:12:06anlıyorum.. aydınlattığınız için teşekkürler.. benim istediğim tüm sitenin değil herbir sayfanın ayrı ayrı hitini ölçebilmek.. çünkü bu hit değerlerini daha sonra farklı bir özellik için kullanmam gerekecek.. ancak görebildiğim kadarıyla oldukça yüksek kaynak gerektiren bir işlem sahte sayfa görüntülenmesinin önüne geçebilmek bu şekilde.. ben 100 değerini örnek olması için vermiştim.. belkide bu şekilde takip etmem gereken 1000 lerce sayfa olacak.. bu sayfaların bazılarının günlük hiti belkide 10k civarında olacak.. böle bi sistemde herbir sayfa için, tek tek giren kullanıcıların ip adresini db ye aktarmak kontrol etmek, görünüşe bakılırsa önemli bi iş olacaktır.. kısıtlı kaynaklarımla bu yükün altından nasıl kalkabilirim merak ediyorum..

bunun yerine önerebileceğiniz başka bir çözüm olabilir mi acaba? - 04-09-2008, 03:24:30Session olabilir ama ayni sayfada refresh yaparsa tekile eklenmez ama session suresi bitince sayfaya girildiginde tekrar 1 tekil daha yazar..
- 04-09-2008, 03:28:33peki bu session süresini uzatmamız mümkün olmaz mı?
bu arada şimdi aklıma geldi.. bildirgec.org ve diğer pilli network sitelerinde, sitelerin çalışma prensipleri gereği "sayfa görüntülenmeleri"nin takip edilmesi gerekiyor.. zira art niyetli bi kullanıcı kendi yazdığı yazıyı devamlı yenileyerekkendine ait payını arttırabilir.. acaba onlar bu işe nasıl bi çözüm bulmuşlar ki..
