Makale Özeti

Bu makalemizde “ASP.Net ile Ziyaretçi İstatistiği” konu başlığını inceleyeceğiz. Bilimsel olarak İstatistik verilerin toplanmasını, değerlendirilmesini, yorumlanmasını ve sunulmasını konu alan matematiksel bilim dalıdır. Bizde ASP.Net ile sitemizi ziyaret eden kullanıcıların bilgilerini veritabanımıza işleyip daha sonra bu bilgileri değerlendirip kullanıcılara sunacağız

Makale

Bu makalemizde “ASP.Net ile Ziyaretçi İstatistiği” konu başlığını inceleyeceğiz. Bilimsel olarak İstatistik verilerin toplanmasını, değerlendirilmesini, yorumlanmasını ve sunulmasını konu alan matematiksel bilim dalıdır. Bizde ASP.Net ile sitemizi ziyaret eden kullanıcıların bilgilerini veritabanımıza işleyip daha sonra bu bilgileri değerlendirip kullanıcılara sunacağız.

Ziyaretçi istatistiği için öncelikle veritabanımızı oluşturalım.

IP: Siteye giren ziyaretçilerin tekilliğini sağlamak amacıyla IP adresini baz alacağız. (Tekillik için Cookie, MacID, SessionID gibi farklı verilerde kullanılabilir)
Tarih: Tarih bazlı raporlar alabilmemiz için Tarih bilgisini tutacağız.
Sayfa: Ziyaretçinin görüntülediği sayfa adresini tutacağız.
Referer: Ziyaretçinin hangi sayfadan geldiği bilgisinin tutulduğu alan.
Browser: Ziyaretçinin Browser bilgisinin tutulduğu alan.
Dil: Ziyaretçinin Dil Bilgisinin tutulduğu alan.

Tablomuzun son hali aşağıdaki gibi olmalıdır. Tablomuzun adı stats



Ziyaretçi bilgilerinin kayıt işlemi tüm sayfalarımızda kullanacağız. Hepsine tek tek kodlarımızı yazmaktansa bir adet class oluşturup sayfalardan bu classı çağıracağız.

Classımızın adı istatistik olsun ve metodumuz ile birlikte kodlarımızı yazalım. 

public static class istatistik
{
      public static void Ekle(String IP, String Sayfa, String Referer, String Browser, String Dil)
      {
        SqlConnection con = new SqlConnection("Server=.; Database=istatistik; User ID=sa; Password=");
        SqlCommand com = new SqlCommand("INSERT stats VALUES(@Ip, @Tarih, @Sayfa, @Referer, @Browser, @Dil)", con);
        com.Parameters.Add("@Ip", SqlDbType.VarChar, 15).Value = IP;
        com.Parameters.Add("@Tarih", SqlDbType.DateTime).Value = DateTime.Now;
        com.Parameters.Add("@Sayfa", SqlDbType.VarChar, 50).Value = Sayfa;
        //Bu kısımda ziyaretçilerin sayfaya direkt url'yi yazıp yazmadığını kontrol etmeliyiz!
        if (Referer == null) { com.Parameters.Add("@Referer", SqlDbType.VarChar, 255).Value = "Direkt Url"; }
        else { com.Parameters.Add("@Referer", SqlDbType.VarChar, 255).Value = Referer; }
        com.Parameters.Add("@Browser", SqlDbType.VarChar, 50).Value = Browser;
        com.Parameters.Add("@Dil", SqlDbType.VarChar, 50).Value = Dil;
        con.Open();
        com.ExecuteNonQuery();
        con.Close();
      }
}

Şimdi yapmamız gereken Sayfaların Load olayında istatistik classımızı kullanıp ziyaretçi bilgilerini veritabanımıza işlemek.

protected void Page_Load(object sender, EventArgs e)
{
   //Request.ServerVariables["REMOTE_ADDR"] bize ziyaretçinin Ip'sini döndürür.
   String IP = Request.ServerVariables["REMOTE_ADDR"];
   //Request.ServerVariables["PATH_INFO"] bize ziyaretçinin girdiği sayfayı döndürür.
   String Sayfa = Request.ServerVariables["PATH_INFO"];
   //Request.ServerVariables["HTTP_REFERER"] bize ziyaretçinin hangi sayfadan yönlendirildiğini döndürür.
   String Referer = Request.ServerVariables["HTTP_REFERER"];
   //Request.Browser.Browser bize ziyaretçinin Browser bilgisini döndürür.
   String Browser = Request.Browser.Browser;
   //Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"] bize ziyaretçinin Dil bilgisini döndürür.
   String Dil = Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];
   istatistik.Ekle(IP, Sayfa, Referer, Broswer, Dil);
}

Default.aspx sayfamıza kodumuzu yerleştirip çalıştırdığımızda ilk bilgilerimizi veritabanına kaydetmiş olacağız.



Projemize bir sayfa daha ekleyip ismine sayfa2.aspx ismini verelim ve default.aspx sayfasına bir adet link yerleştirelim. Bu link bizi sayfa2.aspx sayfasına yönlendirecek olsun.
Link : <a href="sayfa2.aspx">Sayfa 2</a>

Farklı bir bilgi oluşturmak için projemizi Firefox ile çalıştırıyorum ve default.aspx sayfasındaki linke tıklıyorum. Böylelikle sayfa2.aspx ‘e referer bilgisiyle yönlendirilmiş olacağız.



Yukarıdaki tablodada görüldüğü gibi sayfayı Firefox ile açtığımızda Browser bilgimizin, sayfa2.aspx‘e default.aspx‘teki linke tıklayarak girdiğimiz içinde Referer bilgilerimiz değişmiş oldu.

Şimdi elde ettiğimiz bilgileri yorumlamaya çalışacağız.

Günlük Ziyaretçi sayısını bulmak;
SqlConnection con = new SqlConnection("Server=.; Database=istatistik; User ID=sa; Password=");
SqlCommand com = new SqlCommand("Select Count(DISTINCT IP) From stats Where Tarih Between @Tarih1 and @Tarih2",con);
//Bu kısımda bugüne ait kayıtları getireceğimiz için Between ile iki tarih arası kayıtları çekmemiz
//gerekiyor. Tarih1 = DateTime.Now deseydik bize sadece 00:00:00 ile biten tarihleri getirmiş olacaktı.
String Tarih1 = DateTime.Now.ToShortDateString() + " 00:00:00";
String Tarih2 = DateTime.Now.ToShortDateString() + " 23:59:00";
com.Parameters.Add("@Tarih1", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(Tarih1);
com.Parameters.Add("@Tarih2", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(Tarih2);
con.Open();
lblGunlukZiyaretci.Text = com.ExecuteScalar().ToString();
con.Close();

 Toplam Ziyaretçi Sayısını Bulmak;
SqlConnection con = new SqlConnection("Server=.; Database=istatistik; User ID=sa; Password=");
SqlCommand com = new SqlCommand("Select Count(DISTINCT IP) From stats", con);
con.Open();
lblGunlukZiyaretci.Text = com.ExecuteScalar().ToString();
con.Close();

Günlük Gezilen Sayfa Sayısını Bulmak;
SqlConnection con = new SqlConnection("Server=.; Database=istatistik; User ID=sa; Password=");
SqlCommand com = new SqlCommand("Select Count(IP) From stats Where Tarih Between @Tarih1 and @Tarih2", con);
String Tarih1 = DateTime.Now.ToShortDateString() + " 00:00:00";
String Tarih2 = DateTime.Now.ToShortDateString() + " 23:59:00";
com.Parameters.Add("@Tarih1", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(Tarih1);
com.Parameters.Add("@Tarih2", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(Tarih2);
con.Open();
lblGunlukSayfa.Text = com.ExecuteScalar().ToString();
con.Close();

Toplam Gezilen Sayfa Sayısını Bulmak;
SqlConnection con = new SqlConnection("Server=.; Database=istatistik; User ID=sa; Password=");
SqlCommand com = new SqlCommand("Select Count(IP) From stats", con);
con.Open();
lblToplamSayfa.Text = com.ExecuteScalar().ToString();
con.Close();
Diğer Yorumlamaları SQL Cümleciği şeklinde belirteceğim. Yukarıdaki kodlamaya uygun hale getirip kullanıcıya sunabilirsiniz.

En Çok Ziyaret Edilen Sayfa Sayısını Bulmak;
Select TOP 1 Sayfa, Count(Sayfa) From stats Group By Sayfa Order By Count(Sayfa) DESC

En Az Ziyaret Edilen Sayfa Sayısını Bulmak;
Select Top 1 Sayfa, Count(Sayfa) From stats Group By Sayfa Order By Count(Sayfa) ASC

Ayrıntılı Sayfa Ziyaret Sayılarını Bulmak;
Select Sayfa, Count(Sayfa) From stats Group By Sayfa

Ayrıntılı Ziyaretçi Gezilen Sayfa Sayılarını Bulmak;
Select IP, Sayfa, Count(Sayfa) From stats Group By IP, Sayfa

Sayfa Referer Bilgilerini Bulmak;
Select Sayfa, Referer, Count(IP) From stats Group By Sayfa, Referer

… ve bunlar gibi bir çok yorumu stats tablosuna göre yapabilirsiniz…

Bu bilgilere göre ziyaretçileriniz Siteyi ne zaman ziyaret ediyor?, Kaç sayfa geziyor?, Hangi sayfadan geliyor? Hangi dili kullanıyor? Hangi browserı kullanıyor? gibi soruları cevaplayabilirsiniz. Daha sonra bu bilgileri reklam yönetiminizde, site içi yönlendirme işlemlerinde, tasarım aşamalarınızda vs.. kullanabilirsiniz.

Başka bir makalede görüşmek dileğiyle…

Gökhan BAĞCI
Microsoft Certified Professional