• 27-07-2017, 10:30:01
    #1
    Merhaba arkadaşlar benim ürün sattığım bir site var her ürünün altında kendine özgü kaç kişinin görüntülediği bir sayaç var ancak her defasında F5 yaptıkça sayaç sayısı artıyor bunu nasıl engel olabiliriz yardımlarınız bekliyorum. 1 kişinin bakmasıyla 1 defa artsın istiyorum

    sayfamdaki kod
    Alıntı
    $res = $db->query("update " . TABLE_ADS . "" . " set viewed=viewed+1 where id = '" . $id . "'");
    return 1;
  • 27-07-2017, 14:04:30
    #2
    sayfada ip logu tutmalısın. o sayfaya geldıgınde bu ip ıle daha önce arttırmışmı onu kontrol edip ona göre set edersen istediğin şey olur.
  • 27-07-2017, 14:18:54
    #3
    IP'den ziyade cookie ile kontrol edebilirsiniz.
  • 27-07-2017, 16:42:21
    #4
    Aynı durumu soran bir konu daha var ona da gönderdim ama

    https://www.r10.net/1059009978-post9.html
  • 27-07-2017, 23:48:38
    #5
    Misafir
    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 --

    FaTe adlı üyeden alıntı: mesajı görüntüle
    Aynı durumu soran bir konu daha var ona da gönderdim ama

    https://www.r10.net/1059009978-post9.html
    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.
    • maviuan
    maviuan bunu beğendi.
    1 kişi bunu beğendi.
  • 30-07-2017, 16:47:49
    #6
    Session belirleyin, sonrasında if ile session boşsa sayaçı arttırın.

    Buna ek olarak ürüne tıklandığında kullanıcının ip adresini alıp veritabanına yazarsınınız. Sonrasında if(session && ip) şeklinde kullanabilirsiniz. Ama ipleri ürün id ile beraber yazın. Yoksa bir kullanıcı bir ürüne girdiğinde sayaç artar ancak o kullanıcı farklı ürüne baktığında sayacınız artmaz. Umarım bir fikir verebilmişimdir.