Neden veritabanı yerine txt lerde tutulmasını öneriyorsunuz ?
Çünkü her sayfa ziyaretinde veriler elde ediliyor. Eğer ziyaretçi sayısı fazla olursa veritabanı kullanmak verimli olmaz. Veritabanının verimi düşer. Metin belgesi kullanmak en mantıklı iş. Çünkü araştırdım ve istatistikleri tutan sistemler genellikle metin dosyası kullanıyor.
Hocam bu verileri sayfamızda yani default sayfamızda nasıl göstereceğiz.
Eğer verileri veritabanında tutuyorsanız veritabanından değerleri okuyup alacaksınız yada text dosyalarında tutuyorsanız text dosyalarını okuyarak değerleri alacaksınız.
Üstad Burada toplam ziyaretci istatistigini ip numaralarını tekil şekilde alsak elde edebilirmiyiz? aynı ip numarasının bir süre sonra başkasında olma olasılığı da var ama. toplam ziyaretci istatistiğini nasıl elde edecez? bu arada mailime cevap verdigin icin saol. dediğin yoldan halletim problemimi. :)
Burada elde ettiğimiz IP dediğin gibi bir kaç kişi tarafından farklı zamanlarda alınabilir. Ama bu IP adresini kullancaksak buna mecburuz. Toplam ziyaretçi sayısnı bulurken de IP adresine bakarak farklı olanların (distinct komutu ile) sayısını elde edebiliriz. Birçok istatitstik servisinin de böyle yaptığını düşünüyorum. Ancak dediğin gibi IP adresi farklı kişilerde aynı olabilir. Bunun için değişmeyen ve elde edebileceğimiz değerleri kullanmalıyız. Bunları da araştırarak elde edebiliriz.
peki üstad sadece kullanıcı sayısını tutacagımızı varsayarsak her sayfa load edildiginde bir kullanıcı icin sayfanın yeniden bilgileri veritabanına eklemesini nasıl engelleyebiliriz? ornegin baska sayfaya geciş yaptım ben ve bunu veritabanının aşırı şişmemesi icin kayıt etmek istemiyorum. bu verdigin kodları session startta kullansak cözülürmü? yada nasıl?
Dediğin gibi bu kontrolü Session_Start eventı ile yapabilirsin. Bunun dışında ek bir kontrol ile kullanıcının IP`sini kontrol ederek daha önce giriş yapıp yapmadğını bulup ona göre kayıt edersin. Bu yöntem ek bir kontrol gerektiriyor ve yine IP üzerinden işlem yapıyor. Tercih sana kalmış.
verdiğin bilgiler için Teşekkürler. Ancak Hocam bir sorum olcak biz bu global.asax dosyayı nasıl sayfanın içine adepta edeceğiz...
Merhaba. Global.asax dosyasını sayfa içine koyma gibi durum yok. Bu dosyayı projemize ekliyoruz. Bunu da sayfa ekler gibi yapabiliyoruz.
mrb hocam arkadaşlık sistemi yazıyorumda online üye için üyeler tablosunda onlinemi diye bi sütun var ve default olarak false.üye girişi yapınca session["kullanıcı"]=üye_id oluşuyo.benim yapmak istediğim session start olunca bu id yi sql cümlesine sokarak onlinemi true yapmak session end de false yapmak.yani online olup olmadığını belirlemek istiyorum ama global.asax ta sql cümleleri yazılmıor.bu anlattığım olayı nasıl yapabilirim
Merhaba. Global.asax`ta veritabanı sorgulaması ve veritabanı işlemi yapabilirsin. Yukarıda vermiş olduğum kodlarda veritabanı işlemi yapıyorum. Yapmak için hangi namespace`i kullanacaksan onu import etmelisin. Bunun için en başa <%@ Import Namespace = System.Data %> gibi bir ekleme yapmalısın.
hocam üye girişi yapınca session["id"]=üyenosu diye session oluşuyor global asaxta session start ta bu oluşan int id = Convert.ToInt32(Application["id"]); diye alıyorum ve sql cümlesine sokuyorum onlinemi sütununu true yapan update sorgusunu yazıyorum ama olmuyor hatada vermior olmuyorda yanlış bişimi yapıorum.üye girişinde oluşan sessionu session startta nasıl alırız benim yaptığım gibi olmuyor sanırım
Merhaba. SessionStart web uygulamasına istekte bulunulduğunda ve tarayıcı bu web uygulamasını açtığında çalışır. Bu yüzden üye girişi ile sessionstart arasında bir ilgi yok. Çalışmama nedeni büyük ihtimalle bu. Sorguyu üye giriş yapınca çalıştır. Yani giriş yaptığında direk olarak online sütununun değerini değiştir. SessionEnd veya başka end eventları ile de offline olarak ayarlama yaparsın.
çok teşekkür ederim hocam dediğiniz gibi yaptım sorun çözüldü ilginize teşekkürler
bende global.asax ile istatistik yaptım herşey doğru çalışıyor ama online ziyaretçi fazla gösteriyor acaba neden olabilir ki_?
Online Ziyaretçi : 17
Bugün Toplam : 87
Bugün Tekil : 11
Dün Toplam : 36
Genel Toplam : 349
online 17 , tekil 11 _??????
Bunun nedeni yazdığın kod ve bu kodların çalışma zamanı. Yazdığın kod hakkında daha fazla detay verirsen daha iyi yardımcı olurum. Online ziyaretçi sayısını SessionStart eventı ile artırmalı ve SessionEnd ile de azaltmalısın. Ancak tamamen veritabanı kontrolü ile de yapılabilir ancak bu çok performanslı olmayabilir. Daha iyi yardımcı olmama için kodlarından bahsetmen gerekir diye düşünüyorum.
sefa
02 Eylül Çarşamba 2009 11:00
#18
öncelikle ilgin için teşekkür ederim
kodlarım aynen şöyle =>artırma
protected void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["OnlineUsers"] = Convert.ToInt32(Application["OnlineUsers"]) + 1;
Application.UnLock();
}
ve azaltma
protected void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["OnlineUsers"] = Convert.ToInt32(Application["OnlineUsers"]) - 1;
Application.UnLock();
}
sefa
02 Eylül Çarşamba 2009 11:14
#19
taslak.master.cs sayfamda ise şöyle gösteriyorum
lbl_online.Text = Application["OnlineUsers"].ToString();//Online ziyaretçi
yani kısacası herkesin yaptığı gibi ama neden problem oluyor anlamadım
Bu şekilde bir sorun olmaması gerekir. Ancak tekil dediğin değişken ne? Sanırım problem orda oluyor. Online sayısı bu şekilde olmalı.
sefa
02 Eylül Çarşamba 2009 21:43
#21
zaten bana kafayı yedirecek olan da bu , aynen böyle olması gerekirken böyle olmuyor acaba server ın session ayarlarında felan mı problem var ki_? diyecem o da olmaz anlamadım gitti tekil sayıya da gelince onu veritabanımda tutuyorum ip leri karşılaştırıyorum farklıysa artıyor onda problem yok ona eminim başka servislerle de kontrol ediyorum sorun online sayısında istersen vaktin olursa sana zahmet bi siteye bak httpp://www.nihatustam.com ilgine teşekkür ederim
Sorun şimdi anlaşıldı. Eğer tekil sayıyı IP ile kontrol ediyorsan Online sayısını da kontrol etmen gerekir. Online sayısında böyle bir kontrol yapmadığın için kullanıcı her session süresi dolduktan sonra tekrar online gibi olurken tekil sayı IP'den dolayı sabit kalacaktır. Ayrıca session süresi de serverdan dolayı senin verdiğin olmayabilir. Bence IP kontrolünü online sayısı için de yapmalısın.
Eğer veritabanı kullanıyorsan online ziyaretçi bilgilerini de veritabanından alabilirsin. Nasılsa IP'leri tutuyorsun. Bunun yanında bir de tarih tutup bu tarihe göre son 5 dakika ve belirlediğin süre içinde gelenleri online olarak göstrebilirsin. Böylece tekil ile olan farklılık gider. Ayrıca Session süresi gibi değerin önemi kalmaz.
sefa
03 Eylül Perşembe 2009 18:38
#24
öncelikle ilgine gerçekten çok teşekkür ederim dediğin şeyi bende düşündüm ama bu performans açısından galiba problem olur diye düşündüm ama yapacak başka bişe yok galiba bende dediğin gibi yapacağım teşekkür ederim
Merhaba, ben verdiğiniz örnek uygulamayı çalıştırmaya çalışıyorum. verdiğiniz kodda sorun yok. ben biraz daha detaylı olacak şekilde geliştirdim. access kullanıyorum. ancak ben bazı sayfaları filtrelemek istiyorum. bunu yapmanın bi yolu var mı acaba? site ve sitenin içinde yönet klasörü var. yönet klasörü yöneticiler için acaba bu klasörü global den korumanın bi yolu var mı? yani yöneticinin bilgilerini tutmak yersiz olacak. makale basit ve güzel olmuş
Merhaba. Bunun için adresi kontrol ederek istemediğin adresleri süzmelisin. Örneğin
burada paylaştığım kodlarda login.aspx ve admin.aspx sayfası dışında gelen tüm isteklerde sayfalara kendi mesajımı yazdırıyorum. Sen de aynı bu mantıkla kendi sorununu çözebilirsin.
halil
19 Temmuz Pazartesi 2010 15:44
#27
Öncelikle herkeze merhaba.Umarım bu makale için soru sormakta geç kalmamışımdır.Ben siteden çıkan kullanıcının kim olduğunu nasıl öğrenebilirim diye soracaktım.Yani ben kaç kişinin online olduğunu tutmak yerine online olan kullanıcıların isimleriniekranda göstermek istiyorum makaleden anladığım kadarı ile bunu yapmak kolay.Ama kimin çıktığını nerden anlarım bu konuda bana yardımcı olursanız sevinirim.Yardımlarınız için şimdiden teşekkürler.
Sistemden çıkış yapanları direk olarak elde etmek biraz sıkıntılı. Normalde Session_End eventı ile bu işlemin olması gerekiyor. Ancak daha önceki çalışmalarımda bu yol ile istediğimi elde edememiştim. Bunun yerine kullanıcıların en son online olmas sürelerine göre işlem yaparsan da istediğini tam olmasa da kısmen yapabilirsin.
halil
19 Temmuz Pazartesi 2010 17:47
#29
Cevap için teşekkür ederim.inşallah sağlıklı bir yolunu bulurum ve unutmassam sitenizde paylaşırım.çalışmalalarınızda başarılar.
Ziyaretçi istatistiği için zamanında güzel bir script hazırlamıştım. Access veritabanı kullanmaktadır. Scriptin çalışan örneği http://www.birturku.com adresinde mevcuttur.
İncelemek isteyen olursa
http://www.aspindir.com/Goster/5999 adresinden indirebilirler.