mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ile Ziyaretçi Bilgileri
Bu yazımda ziyaretçilerin eriştikleri sayfaları kaydedip, bu bilgileri başka sayfa üzerinden görüntülemeyi anlatmaya çalışacağım. Ziyaretçilerin eriştikleri sayfaları bulabilmek için Asp.net ile hazırladığımız proje içinde Global.asax dosyasını eklememiz gerekiyor. BeginRequest eventı ile istek yapılan her sayfayı ve istek zamanını alıp text dosyasına kayıt edeceğiz. Daha sonra da kayıtlı bilgileri okuyup başka sayfa üzerinden görüntüleyebileceğiz. Bu görüntülemeyi de Ajax kullanarak ve belirli süre aralığında Ajax isteği yapıp, yeni bilgileri elde edeceğiz. Ayrıca hazırladığım uygulamada online kullanıcı sayısını da elde ediyoruz. Oldukça faydalı ve kullanışlı bir uygulama olduğunu düşünüyorum. Ayrıca kullanmış olduğum yöntemler ile çok daha farklı çok daha renkli uygulamaların geliştirilebileceğini söyleyebilirim.

Öncelikle Global.asax dosyamızın kodlarına bakalım. Hazırladığım örnek uygulamanın kodları aşağıdaki gibi olmalı.

<script runat="server">
    void Application_Start(object sender, EventArgs e) 
    {
      Application["online"] = 0;
    }
    void Session_Start(object sender, EventArgs e) 
    {
      Application["online"] = int.Parse(Application["online"].ToString()) + 1;
      Session.Timeout = 5;
    }
    void Session_End(object sender, EventArgs e) 
    {
      Application["online"] = int.Parse(Application["online"].ToString()) - 1;
    }
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
      int son_sayfa_adet = 40;
      if (Request.RawUrl.Contains(".aspx"))
      {
        StreamReader sr = new StreamReader(Server.MapPath("~/online.txt"), System.Text.Encoding.Default);
        string sonuc = sr.ReadToEnd();
        sr.Close();
        string[] dizi = sonuc.Split('\r');
        if (dizi.Length <= son_sayfa_adet)
        {
          StreamWriter sw = new StreamWriter(Server.MapPath("~/online.txt"), true, System.Text.Encoding.Default);
          sw.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "  " + Request.RawUrl);
          sw.Close();
        }
        else
        {
          StreamWriter sww = new StreamWriter(Server.MapPath("~/online.txt"));
          sww.WriteLine("");
          sww.Close();
          StreamWriter sw = new StreamWriter(Server.MapPath("~/online.txt"));
          for (int i = 1; i <= son_sayfa_adet - 1; i++)
          {
            sw.WriteLine(dizi[i].Replace("\n", ""));
          }
          sw.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "  " + Request.RawUrl);
          sw.Close();
        }
      }
    }
</script>

Daha sonra ise kayıt edilen bilgileri Ajax ile elde edeceğiz ve istediğimiz bir sayfada bu bilgileri kullanacağız.. Ajax işlemleri için Generic Handler kullanacağız ve bu yöntem ile kayıtlı verileri elde edeceğiz. Ayrıca Ajax isteği yaptığımız sayfada Ajax isteğini belirli süre içinde yineleyerek verilerin yenilenmesini sağlıyoruz. Generic Handler dosyamızda yer alan kodlar ise şöyle olmalı.

  public void ProcessRequest(HttpContext context)
  {
    System.Threading.Thread.Sleep(500);
    context.Response.Write("<div class='online'>Online : " + context.Application["online"].ToString() + "</div><div class='link'><b>Ziyaret Edilen Son Sayfalar</b></div>");
 
    StreamReader sr = new StreamReader(context.Server.MapPath("~/online.txt"), true);
    string[] dizi = sr.ReadToEnd().Split('\r');
    for (int i = dizi.Length - 2; i >= 0; i--)
    {
      context.Response.Write("<div class='link'>"+dizi[i].Split('')[0]+" : <a href='" + dizi[i].Split('')[1] + "'>" + dizi[i].Split('')[1] + "</a></div>");
    }
    sr.Close();
  }

Tüm bu kodlamalardan sonra Ajax verilerini yazıdaracağımız sayfada Ajax isteği için yazacağımız Jquery kodları ise şöyle olmalı.

    <script type="text/javascript">
      $(document).ready(function(){
        al();
        var timer = setInterval(al, 5000);
        $("#yenile").click(function(){
            clearInterval(timer);
            al();
            timer = setInterval(al, 5000);
        });
      });
      function al()
      {
        $("#load").show();
        $.ajax({
          type: "POST",
          url: "ajax.ashx",
          data: "",
          success: function(msg){
            $("#sonuc").html(msg);
            $("#load").hide();
          }
        });
      }
    </script>

Uygulamayı çalışır halde buradan görebilirsiniz. Buradan da örnek projeyi indirebilirsiniz.

Uygulamanın kodlama bölümü bu kadar. İstek yapılan sayfaların sadece son 40 adetini text dosyasına kaydediyorum. Bu sayıyı isteğe göre değiştirebiliriz. Ayrıca verileri text dosyası yerine veritabanında da tutabiliriz. Ben küçük bir örnek olması açısından bu şekilde yaptım. Bu uygulamayı ziyaretçileri takip edebilmek için kullanabiliriz. Bunun dışında widget olarak kullanabiliriz.

Ayrıca Ajax isteğinde bulunduğumuz sayfadaki yöntem ile de birçok uygulama yapabiliriz. Canlı maç anlatımı yapan sitelerin mantığı tamamen böyle diyebilirim. Belli aralıklarla istekte bulunup verileri alıyoruz. Bu yöntemde oldukça faydalı ve kullanışlı.

Umarım güzel ve faydalı bir çalışma olmuştur.

İyi Çalışmalar!
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Jquery ve Asp.net MVC ile Ajax İşlemleri Asp.net, Jquery ve Ajax ile Yapmış Olduğum Galeri Hazır Asp.net MVC'de Dosya Upload İşlemleri (Multi Uploading) Asp.net'te Jquery ve Ajax Kullanarak Email Gönderme Asp.net MVC ile Routes Tanımlama ve Kullanma
Yorumlar
Yorum Yaz
RSS Yorum Takibi
serkan kılıç 21 Şubat Cumartesi 2009 15:36 #1
arkadaşlar ben anket yapmak istiyorum ama yapamadım aspx`de yardımcı olurmusunuz bana rica etsem elinde hazır olan warmı acaba ?
Mehmet Duran 21 Şubat Cumartesi 2009 15:40 #2
Anket çok zor olan bir uygulama değil. Veritabanından anket sorusunu ve cevaplarını çekeceksin. Cevaplardan hangisi seçilmiş ise oylama miktarını artıracaksın. Zamanım olmadığı için uygulamalara bakamıyorum. Ama üzerinde durulursa yapılabilir bir uygulama.
Mehmet 16 Mayıs Pazar 2010 21:36 #3
Mehmet arkadaşım örnek güzel olmuş eline sağlık.yalnız bir problem var.şimdi burda bu gelgit yaparken kendini belli ediyor.yani timer a bağladığım zaman jquery ile.gel git olurken kendini belli ediyor bunu nasıl çözebilirim? yani hani update panelde gelip gittiğini hissetmiyoruzya bundada öyle olmasını nasıl sağlarız?
Mehmet Duran 17 Mayıs Pazartesi 2010 22:54 #4
Merhaba. Buradaki örnekte gelgit durumu derken sanırım loading resminin gözükmesinden bahsediyorsun. Bunu engellemek için al fonksiyonu içindeki $("#load") ile başlayan satırları silmen yeterli olur.
mehmet 18 Mayıs Salı 2010 17:59 #5
hayır onu demiyorum.ben kendim bir uygulama yaptımda timer ile.onda veriler gelip giderken belli oluyor.loading den bahsetmiyorum.yazı kaybolup geliyor anlıcağın yani.bunu nası çözebilrim
Mehmet Duran 18 Mayıs Salı 2010 23:54 #6
Bunun için yine aynı fonksiyon içinde sonuçları yazdırdığımız kısımda öncelikle sonuçların yazılacağı alanın içeriğini boşaltıp, daha sonra verileri yazdırırız. Anladığım kadarıyla bu durumdan bahsediyorsun. ($("#sonuc").html("").html(msg); gibi. Burada fadeIn, slideDown gibi efekt fonksiyonlarını kullanarak daha görsel işlemler de yapabilirsin.)
mehmet 20 Mayıs Perşembe 2010 23:59 #7
benim kodum bu.bana yardımcı olabilirmisin acaba arkadaşım burda ne değişiklik yapmam gerek? $("#data").html(msg.d);
Mehmet Duran 21 Mayıs Cuma 2010 00:53 #8
Bir önceki yorumumda belirttim. Kodunu $("#data").html("").html(msg.d); şeklinde yaparsan elementin içi boşaltılır ve daha sonra yeni veriler yazılır. Ancak çok hızlı olabileceğinden boşaltma işleminden sonra belli bir süre gecikmesi koyabilirsin.
mehmet 21 Mayıs Cuma 2010 21:45 #9
yardımın için sağol arkadaşım ama bu yine benim istediğim gibi olmadı.yani şöyle düşün.bir chat uygulaması gibi düşün.bu verilerin gelip gittiğini hissettirmemem lazım.kodu o şekilde değiştirdim ama yine aynı belli oluyor.jquery de bunu yapmanın yolu yok sanırım
Mehmet Duran 21 Mayıs Cuma 2010 22:50 #10
Ben söylemek istediğinin tam tersini anlamışım. Ben gidip gelme belli olsun olarak anladım ama sen tam tersini istiyorsun. Bunun için yazımda verdiğimde script kodları yeterli diye düşünüyorum. Eğer scroll olan bir alanda güncelleme yapıyorsan tıpki chat uygulamalarındaki gibi ise html değerini değiştirdiğin elementin scroll değerini de her seferinde ayarlaman gerekir.
mehmet 22 Mayıs Cumartesi 2010 14:07 #11
arkadaşım jquery hakkında benim çok bilgim yok.ama bu yaptığın uygulamayla bişeylere başladım bende jqueryde.ama istediğimi elde edemedim.şuanda sayfamda direk olarak veriler alt alta geliyor.birincisi bunu geçen sorduğum gibi iframe içine almalıyım ve bunun scrollu herzaman en aşağıda olmalı.artı bu gelip gitme olayını belli etmemem lazım.bunları yapamadım bir türlü
Mehmet Duran 23 Mayıs Pazar 2010 01:32 #12
Yeni başlamış isen biraz daha bilgilerini artırman lazım. Söylediğin şey çok zor değil. Daha önce aynısı yaptım. Şu anda zamanım yok denecek durumda. Bu yüzden çok fazla yardımcı olma imkanın yok. Söylediğin olay için frame kullanmana gerek yok.
İ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.
Gençken bilgi ağacını dikmesek, yaşlandığımız zaman gölgesine sığınacak bir yerimiz olmayacaktı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