mehmetduran.com - Paylaşmak Güzeldir...
IP Kontrolü ile Oylama (Rating) Uygulaması
Bu yazımda daha önce Jquery, Ajax ve Cookie kullanarak hazırladığım ve sitemde de kullanmaya başladığım oylama (rating) uygulamasını IP kontrolü ile hazırladım. Hem yabancı bir arkadaşımızın isteği hem de cookie yöntemi dışında daha güvenli bir kontrol sağlayan IP kontrolü ile bu uygulamayı daha gerçekçi daha kullanışlı bir hale getirdiğimi düşünüyorum. Halen eksiklikleri ve hataları olabilir. Ancak zamanla bu hataları ve eksiklikleri giderip tüm projelerimde kullanacağım bir uygulama haline getirmeyi düşünüyorum. Bu güzel uygulamayı sizlerle de paylaşıyorum.

Bu uygulamada önemli noktalardan biri kullanıcının IP'sini almak ve daha önce oy kullanıp kullanmadığını kontrol etmemiz. Bunun içinde ilk olarak kullanıcın IP'sini elde etmemiz gerekiyor. Asp.net'te kullanıcının IP adresini aşağıdaki gibi bir kod ile elde edebiliyoruz.

  string ip = HttpContext.Current.Request.ServerVariables["Remote_Addr"].ToString();

Daha sonra ise klasik karşılaştırmalar yaparak kullanıcın oy kullanmasını veya oy kullanmamasını sağlıyoruz. Kodlamalar uzun ve biraz karmaşık olduğundan buradan paylaşmıyorum. İlgilenenler aşağıda linkini vereceğim projeyi indirerek kodlamaları inceleyebilir.

Ayrıca örnekte kullandığım veritabanı yapısı bu uygulamayı isteyen arkadaşımızın örneğine göre hazırlandı. (Ürünler var ve kullanıcılar bu ürünleri puan ile değerlendiriyorlar. IP adreslerini ve oyladıkları ürün id'lerini ise veritabanımızda tutuyoruz.)

Projeyi çalışır halde buradan görebilir ve test edebilir, buradan da indirebilirsiniz.

İyi Çalışmalar!
Mehmet Duran 01 Şubat Pazar 2009 25 18149 4,1
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Silverlight 2 Visual Essentials (E-book) FaceBox Uygulaması Jquery ile Typing Uygulaması (Harf Harf Yazdırma) Microsoft Yaz Okulu Projemiz - Cengaver Jquery İnner Fade Uygulaması
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Mahmut KANTAR 01 Şubat Pazar 2009 20:51 #1
Kardeşim Çok Başarılısın, Daha da Başarılı Olacaksın. Şimdiden Seni Kutlarım... ;)
Mehmet Duran 01 Şubat Pazar 2009 20:58 #2
Teşşekkür ederim. Umarım hep beraber birşeyleri başaracağız.
Hasan Gürsoy 02 Şubat Pazartesi 2009 09:20 #3
Uygulama daha güzel olmuş, teşekürler. İsterseniz aşağıdaki kodu da ekleyebilirsiniz. Birkaç hafta önce biyerlerden bulmuştum. Kullanıcı High Anonymous Proxy kullanmadığı sürece gerçek IP`si ortaya çıkıyor.: private string GetIPAddress() { string sIPAddress = null; sIPAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(sIPAddress)) sIPAddress = Request.ServerVariables["REMOTE_ADDR"]; return sIPAddress; }
Mehmet Duran 02 Şubat Pazartesi 2009 10:49 #4
Daha gerçekçi kontrol için kullanılabilir. Bilgi ve kodlar için teşekkür ederim.
Mehmet 28 Şubat Cumartesi 2009 02:56 #5
Merhaba arkadaşlar, yazmış olduğunuz Ip çekme yöntemleri genellikle hosting firmalarının güvenlik ve performans artırma çalışmaları için sanal proxy kullanmaları dolayısı ile çalışmayacaktır. Sonra insanlar bu gibi sorunları kendi hatalarından kaynaklandığını düşünerek yazdıkları kodları kurcalayıp duruyorlar. Bu gibi durumlarda server kendi Ip Adresini görüntüleyecektir. Bilginize...
Mehmet Duran 28 Şubat Cumartesi 2009 10:39 #6
Yaptığım uygulamanın çalışır hali var ve arada bakıyorum dediğin gibi bir problem yok. Olsa bile server dediğimiz bir makine ve istediğimiz ayarları yaptırma hakkımız var. Onun için problem olacağını düşünmüyorum.
HasanG 12 Aralık Cumartesi 2009 15:11 #7
Mehmet merhaba, Sormak istediğim birşey var yine. Bu yorumlama kısmında küçük bir sorun var. Yıldızlara defalarca tıkladığımızda istek de defalarca sunucuya gitmekte ve hoş bir kullanım olmamakta. biyerlerde .stop() kullanmam(ız) gerek. Eğer bunu çözebilirsen paylaşabilirmisin? Sitende de aynı sorunun olduğunu görüyorum.
Mehmet Duran 12 Aralık Cumartesi 2009 23:18 #8
Dediğin sorun sanırım örnekte var ama şu anda sitemdeki kullanımda böyle bir durum yok. stop() fonksiyonu yerine kendi kontrolümü yapıyorum. Sayfa load olduğunda servera 1 istekten sonra bir daha istek yapılamıyor (oylama için). Zamanında örneği o şekilde hazırlamış olabilirim ama zamanla değişiyor. Şu anda kullandığım bölümde öyle bir sorun söz konusu değil.
Kursad Koc 30 Aralık Çarşamba 2009 19:07 #9
Merhabalar ben örneği indirdim kendimde uyguladım... var product_id = <%= product_id %>; Burada yapmaya çalıştığımız şey QueryString bilgisini almak sanırım..ve bu satırda hata alıyorum..Jquery dahilinde Querystring verisini almak için kullanılan bir yönetm mi bu yoksa ayrı bir plugin falan mı var? Çalışan uygulamayı ekledim diyeceksiniz haklısınız ancak dosyalardaki detail.aspx sayfasını açıncada bu satırın altı çiziliyor. Yardımcı olursan sevinirim..İyi günler iyi çalışmalar
Mehmet Duran 30 Aralık Çarşamba 2009 22:19 #10
Merhaba. Şu anda kodları tam hatırlamıyorum ama buradaki değer sayfanın kod bölümünde tanımladığım genel bir değişken olan product_id değeridir. Özel bir plugin falan değildir. Sadece server tarafında tanımlanan ve değer alan public bir değişkenin değerini script bir değişkene atıyorum. Hata vermemesi gerekir.
Kursad Koc 30 Aralık Çarşamba 2009 22:53 #11
Bilgi için teşekkürler..ben url deki querystring bilgisini alıyoruz sanmıştım ancak codebehind da bulunan değeri alıyomuşuz..Tekrardan teşekkürler iyi günler
Mehmet Duran 30 Aralık Çarşamba 2009 22:56 #12
Söylediğin doğru. Burada aldığımız değer Querystring'ten gelen değer. Bu değeri bu şekilde server tarafında alıp, script değişkene atadım. Ancak server tarafı olmadan direk olarak script tarafında da alabiliriz.
serkan 27 Nisan Salı 2010 17:44 #13
Merhaba, uygulamayı kendi sistemime uygulamaya çalışıyorum.detail.aspx sayfasındaki var product_id = <%= product_id %>; <%= product_id %>; bunu nerede oluşturuyoruz acaba?
Mehmet Duran 27 Nisan Salı 2010 23:59 #14
Merhaba. Orada <%= product_id %> ifadesi ile çağırdımız değer sayfanın kod tarafında tanımlanan public bir değişken ve bu değişken değerini page_Load içinde url'deki değerdan alıyor. Ben örnekte bu şekilde kullanmışım. Ancak bunun yerine script değişkene değer atarken server taraflı değişken kullanmadan direk <%= Request.QueryString["isim"] %> gibi de yapabiliriz.
serkan 28 Nisan Çarşamba 2010 16:55 #15
Şu makaleyi, video gösterim şeklinde anlatmanız mümkünü? Bu kodları ben çalıştıramıyorum.
function rate(score, product_id) {
$.ajax({
type: "POST",
url: "rate.asmx/rate_product",
data: "{HataOylamaSayisi:"+score+", HataID:"+product_id+"}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg){
$("#result").fadeOut(300).fadeIn(function(){$(this).html(msg.d), 300}
Mehmet Duran 28 Nisan Çarşamba 2010 21:28 #16
Şu anda video hazırlayacak vaktim yok. Hatta bloğumla bile çok fazla ilgilenemiyorum. Neden çalıştırmadığını bulman lazım veya aldığın hatanın nedeni nedir. Bunları anlayabilmek için ise Firefox'un Firebug eklentisini kullanmanı tavsiye ederim. Onunla Ajax işlemlerini ve script kodlarını takip edebilirsin.
ali 21 Mayıs Cuma 2010 00:15 #17
merhaba.Burada veritabanında ip yi tutmanızın mantığını çözemedim.Yani her oy verenin ip sini mi tutuyorsunuz.her bir ürün için tek bir ip kolonu var. yani ben oy verdim benim ip numaramı aldınız veritabanına yazdınız.ikinci oyda oy veremiyorum.ama benden sonra bir kisi gelip oy verdiyse o alan onun ip numarasını yazıyor ve benim ipim ile eşleşmediğinden ben oy verebiliyorum mantığı çıkıyor.yanlış mı düşünüyorum.biraz detay vere bilir misiniz??
ali 21 Mayıs Cuma 2010 00:23 #18
pardon siz veritabanı için aynı satırda update değilde insert into yapıyorsunuz.yani 1 numaralı ürün için oy verenlerin ip numaralarını yazıyosunuz.ama bu sefer de veritabanına durduk yere şişme ve yer kaplama anlamına gelmez mi?bunun yerine global ip tanımlayıp sayfa yüklenirken olusan ip ile o yıldızlara tıklarken ki ip yi karşılaştırmak mantıkllı olur mu?eğer mentıklıysa ilk karşılaştırmada izn verip ikinci de izin vermeyen bir yapı c# ile nasıl yazılabilir?
ali 21 Mayıs Cuma 2010 00:38 #19
hazır aklıma gelmişken bir soru daha sorayım.gridview içerisinde imagebutonum var gridview da updatepanelin içinde. imagebutonu click eventına basit bir kod yazdım.ama sayfayı çalıştırdıktan sonra o imagebutona tıklaadığımda javascript çalışma hatası gibi birşey çıkıyor visual studio da throw error kısmın işsret ediyor.Acaba bu neden kaynaklanıyor.kod kısmında kaynaklnmadıgından eminim.Şimdiden herşey için tesekkurler.
Mehmet Duran 21 Mayıs Cuma 2010 00:56 #20
Merhaba. Öncelikle yanlış düşündüğünü belirteyim. Burada IP kontrolü yaparken her oylama yapan için veritabanı tablosuna IP'si ile oyladığı ürün bilgisini ekliyoruz (güncellemiyoruz). Oylama yapmadan önce kullanıcının IP'sini ve oyladığı ürün bilgisinin daha önce olup olmadığını veritabanında sorgulatıp bu sorgu sonucuna göre oylama yapılıyor veya yapılmıyor. Durum kısaca böyle. Bu yöntem veritabanına yük bindirse de kullanılabilecek yöntemlerden biri. Sen kendi yöntemini uyarlayabilirsen kullanabilirsin. Tamamen sana kalmış bir iş. IP olmadan cookie ile de gerçekleştirilebilir. Bunun örneğini de sitemde bulabilirsin.
Mehmet Duran 21 Mayıs Cuma 2010 01:00 #21
Microsoft'un Ajax kütüphanesini fazla kullanmadım. Ben jQuery ile Ajax uygulamaları geliştiriyorum. Onun için bu konuda kodları da görmeden birşey söyleyemem. Ancak Script hatalarını görmek ve değerlendirmek için Firefox'un FireBug eklentisini kullanmanı tavsiye ederim.
ali 21 Mayıs Cuma 2010 16:52 #22
ben sedece üyelerin oy kullanmasına izin vereceğim o zaman ip kontrolünün bir önemi kalmıyor.(veritabanına yazdıracağım için)yani ürün id ile kullanıcı id yi ilişkilendirmiş oluyorum.Peki sence büyük bir site için ve sadece üyelerin oy verebileceği bir site için cookie mi yoksa ip mi daha etkili olur?
Mehmet Duran 21 Mayıs Cuma 2010 22:45 #23
Eğer üyelik sistemi olan bir sisteme böyle birşey ekleyeceksen bence her üyenin bilgisini veritabanında tutsan daha iyi olur. Veriler çok tutarlı olur. Cookie ile yapılan işlemlerde cookie silinerek tekrar tekrar işlem yapılabilir ama üyenin bilgisi ile işlem yaparsan her üye her zaman tek bir kez oylama yapar.
Samet 25 Şubat Cuma 2011 16:17 #24
Peki elinizde örneğin sizin yorum bölümü, yorum satırları gibi bir çalışma var mı Mehmet bey ?
Mehmet Duran 08 Nisan Cuma 2011 22:26 #25
@Samet, elimde yorum bölümü var ama paylaşacak durumda değilim. Ama sitemde paylaştığım örnekler böyle uygulamaları geliştirebilmek için iyi bir referans konumunda diye düşünüyorum.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Başarısızlıklarınız ile soylu bir şekilde yüzleşin, başarıdan farkı kalmayacaktır.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009