PHP uygulama değişken ...

6 Cevap php

Ben bir PHP iş görüşmesine gittim, ziyaretçilerin web sitesi aracılığıyla taramasını botlara algılar ve içeriğini çalmak için bir kod parçası uygulamak istendi.

Yani son ziyaret damgası depolamak için bir oturum değişkeni kullanarak çok hızlı / sık ziyaret / sitesi yenilenir olup olmadığını tespit etmek için kod birkaç satır uygulanmaktadır.

Ben oturum varaibles vb çerezleri tarafından manupilated olabilir söylendi var, bu yüzden ziyaretçi IP'leri $ _SERVER [REMOTE_ADDR] karşı damgası bilgileri saklamak için kullanabileceğiniz bir uygulama, değişken olup olmadığını merak ediyorum?

Ben bir dosyaya veri yazma biliyorum ama yüksek trafik web sitesi için çok iyi değil.

Selamlar

James

6 Cevap

I got told that session varaibles can be manupilated by cookies etc,

Sadece temiz olması için, müşterilerin beğenisine oturum değişkenleri düzenleyemezsiniz. Onlar başka bir oturuma verir, ancak hangi PHPSESSID silebilir ya da değiştirebilirsiniz. Global değişkenler (yani $_SERVER) kalıcı değildir, yani bunları yaptığınız herhangi bir değişiklik sonraki sayfa yük bunu yapmaz.

Tarayıcıların algılama hakkında gitmek için en iyi yolu, bir veritabanındaki tüm sayfa yüklerin IP adresi, user-agent ve zaman damgası saklamaktır. Havai minik.

Bir kelimeyle, hayır. Sizin seçenekleri çerezler, oturum vars (aka sunucu tarafı kurabiye) ve depolama (dosya / db) vardır.

Bunun için en iyi bahis günlükleri sonrası-aslında analiz olabilir. Bu on-the-fly içerik hırsızlığı durdurmak değil, ancak kötüye desenleri bulmak ve gelecek girişler gelenler IP'leri engellemek için çok daha kolay olacak.

Sen mağaza IP ve damgaları sunucu tarafı gerekir. Bir bot çerezleri göndermek olacağını düşüktür, ve hatta bir URL tabanlı oturum güvenilir değildir.

Eğer sadece sizi öldürecek düz dosya günlüğü yapıyorsun sürece bir dosyanın havai çok fazla olmamalıdır. Siz SQLite'ı ya da belki küçük bir hız artışı için bir bellek tabanlı dosya sistemi üzerinde saklanan, benzer kullanabilirsiniz. Yoksa memcached gibi bir şey ile gidebiliriz. Eğer veri devam gerekiyorsa, MySQL kullanabilirsiniz. Tam gelişmiş bir veritabanı yükü oldukça fazla şey yapmak için PHP gereken zaman ile karşılaştırıldığında hemen hemen hiçbir şey.

Eğer gerçekten oturumları ile böyle bir şey yapmak istiyorsanız, tanımlanmış bir "Kabul Ediyorum" değişken oturumda olmadıkça, bir kullanıcı sözleşmesi sayfayı görüntülemek. Bir bot geri geçerli bir oturum göndermek değilse Bu şekilde, o gets kullanıcı anlaşmadır. Eğer, o zaman oturum değişkenleri ile izleyebilirsiniz.

Eğer istekleri arasında istemci durumunu hatırlamak gerekir, ve daha değilse seans havai en özel alternatifleri daha, kadar tabi olacağı yok çünkü oturum tabanlı çözüm gerekli değildir unutmayın.

Oturum değişkenleri çerezler tarafından manipüle edilebilir olduğunu açıklamaya ilişkin, tamamen doğru değil. Eğer register_globals bırakacak kadar aptal konum ve bir global değişken için sorarsanız Ancak, ben bir oturumda, bir çerez, bir sorgu dizesi geldi olmadığı konusunda bir tahminde bulunmak istemem , çevre, veya önceden tanımsız edildi. Açıkça tabii $ _SESSION üzerinden erişmek durumunda tüm tartışılır.

Botlar (geri oturum değişkeni geçirerek değil gibi) tanımlama veri kaydetme göz ardı edebilirsiniz. En iyi seçenek, harici DB veya depolama sistemi çeşit kullanmak olacaktır. Sadece IP depolar ve bunu son bağlantılarını karşılaştıran bir C + + soket programı gibi.

Yalnız yenileme kat onları yenmek için beklemeyin. Ben iletişim formu spam mücadele için çok benzer bir şey yaptım ve bazı botlar sonraki harekete geçmeden önce insanlar sürece bekleyin.

Ben sadece html belgeyi yüklemek ip adresleri daha bakmak, ve size o ip okunaklı görünüyor söylemek için orada bazı mantık koyabilirsiniz php ayrıştırmak için css dosyaları ayarlarsanız vb favicon, css stil, gibi şeyler görmezden istiyorum. Sadece önbelleğe alma konusunda dikkatli olun.

Ayrıca, size googlebot gibi meşru botlara lokavt yok emin olmak için adımlar atılmaktadır?