Benim bu tür konularda kullandığım yöntem kişi sayfaya geldiğinde Ip si ile beraber bir sayac tablosu tutuyorum.
Tabloda ->
id,
deger,
ip,
zaman
isimli 4 sütunum var.
Buradaki
id otomatik artıyor bunu geçiyorum.
deger dediğimiz olayda bu tabloyu tüm sitedeki istediğim tüm alanlar için sayaç olarak kullanmamı sağlayan
varchar şeklindeki alanım. Örn; ürünler için urun_{urun_id si} şeklinde veya yorumlar için yorum_{yorum_id si} şeklinde kendim tutuyorum böylece tek tablo tüm site için sayaç oluyor.
ip kısmı kişinin ip kısmı
zaman kısmı işin asıl yeri php time() fonksiyonu ile buraya değeri eklediğim anı yazıyorum ve
cron job ile her saat başı "tabloya git time < time_sutunu olan dataları sil" diyorum. böylece bir ip adresi ile biri bir şey beğendiyse 24 saat boyunca bu sayede tekrar bir şey arttıramıyor.
Tabi biri sayfaya giydiyse ve ilk defa beğeniyorsa (24 saat içinde yani) o sayfanın veya yorumun veya ürünün tablodaki satırındaki
sayac isimli sütunu +1 ekleyip yukarıdaki tabloma kişiyi ekliyorum.
Tabi her sayfaya girdiğinde bu kişi beğenmişmi olayını sql'e yıkarsanız olmaz.
Burada da devreye
cookie giriyor.
Kişi sayfaya girdi php önce
cookie varmı diye baktı. Yoksa veritabanında yukarıdaki tabloya gitti urun_id ve ip ile eşleşen bir satır var mı diye baktı. oda yoksa eklemeleri yaptı önce tabloya ipsini ve urun_id sini kaydetti sonra
cookie oluşturdu.
Buna ek olarak daha sağlam bir yapı olarakta şöyle bir şey var. Her kullanıcı siteye ilk girdiği anca ip adresi ile aynı adda bir
session oluşturursun.
Gezdiği, beğendiği her sayfada
session'a örneğin ":::" ekini ekleyerek değer tutarsın.
Sonrada her sayfanın başında
sessionı explode(":::",$session[ip]) ile parçalatıp sayfadaki sayaç cooki kısmına girmesine engel olursun.
Çünkü cookieler tarayıcı önbelleği silindiğinde, gizli sekmeden girildiğinde vs. silinebilirler. Sessionlar ise aynı pencere kapatılınca gider.
En güveniliri session + cookie + ip tablosu şeklinde kullanımdır.
Session kısmı çok ağır trafik alan sitelerin yoksa gereksizdir. Çünkü buradaki session'ın görevi cookie kullanımının aksine sql + php çalıştırmasını engellemek değil daha az php kullanımını sağlamaktır.
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 23:48:38 -->-> Daha önceki mesaj 23:46:12 --
Bu yorumunu diğer konuda da gördüm sıkıntısı şuradaki cookie dediğin şey tarayıcı önbelleği silinince, gizli sekmeden girilince vs. gibi daha bir çok işlemle rahatça silinebilir. Bu sebeple bu yöntemin yukarıda bahsettiğim şekilde ip tablosu ve(ya) session yardımlarıyla beraber kullanılmalıdır ki sayacı arttırmak istediğin kişiler sürekli bunu yapamasınlar.