|
Kişi Bazlı Online Kullanıcılar |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu makalemizde sitelerdeki oturum yönetiminin bir parçası olan kişi bazlı online kullanıcıların gösteriminin veritabanı yardımı ile nasıl yapılacağını anlatmaya çalışacağım. Genelde siteleri ziyaret eden kullanıcıların pek azı “Çıkış” linklerini kullanarak siteyi terkeder ve bunu uygulamayan kişilerin o sistemde offline olduğunu doğrulamak çoğu zaman imkansızdır. Bu yüzden bir kullanıcının sitede sabit bir sayfada bulunduğu süre, belirli bir zaman dilimi(çoğu zaman bu on dakikadır.) kabul edilir ve bunun üzerinden hareket edilerek, o kullanıcının her faaliyet zamanının, zaman dilimi kadar fazlası veritabanında kayıtlanır. Daha sonra veritabanında kayıtlı olan zaman eğer şimdiki zamandan büyük ise o kişi online kullanıcı olarak kabul edilir .İkinci yol ise şimdiki zaman veritabanına kayıt edilerek, eğer veritabanındaki zaman şimdiki zamanın bu zaman dilimi kadar azından büyükse o kişi online kabul edilir. Biz uygulamamız birinci yola göre yapacağız. Yalnız şuna dikkat edilmesi gerekir ki, bu da o kullanıcının her sayfa değişiminde veritabanındaki zamanın update edilmesidir.
İsterseniz şimdi uygulamaya geçelim.
Uygulamamız basit bir üye girişi örneğinin temellerine dayanmaktadır ve şu adımlardan oluşmaktadır.
• Üye girişi yapılacak ve kullanıcı için Session oluşturulacak.
• Bu kullanıcın son giriş zamanı update edilecek.
• Online kullanıcıların gösterilme işlemi yapılacak.
Bu örneğimizi MySql veritabanı kullarak geliştiriyoruz. Öncelikle “Test” adlı veritabanı içinde “users” adlı bir tablo oluşturalım ve ilk kaydımızı girelim.
Gördüğünüz gibi tablomuzda “id”, “username”, “password”, “lasttime” adlı sütunlarlar bulunmaktadır ve şunu belirtelim ki ilk kaydımızda “lasttime”a (kullanıcının son faaliyet süresine) şimdiki zamanı girmeliyiz.
Şimdi sıra geldi formumuzu oluşturmaya, basit bir üye girişi şeklinde aşağıdaki gibi bir form hazırlayabiliriz. Üye giriş formunu bir panelin içine alıyoruz. Giriş yapıldığında Panelimizin visible(görünebilirlik) özelliğine false değeri verilecek.
Daha öncede dediğimiz gibi yapmamız gereken en önemli iki kısım, kullanıcının web sayfa üzerinde yaptığı her faaliyetten sonra veritabanındaki “lasttime” sütununun şimdiki zamandan, belirli bir zaman dilimi kadar fazla olarak girilmesi ve online olan kullanıcıların gösterilmesidir. Biz uygulamamızda zaman dilimini 10 dk olarak kabul ediyoruz.Gelin şimdi uygulamamızın temelleri atalım.
İlk olarak veritabanı bağlantı nesnemizi ve Page_Load methodumuzu oluşturalım. Bu örneğimizde MySql Connector olarak MySQL Connector/ODBC (MyODBC) kullanacağız.
private OdbcConnection conn = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;database=test;uid=root;password=root123");
private void Page_Load(object sender, System.EventArgs e)
{
updatetime(); // Eğer kullanıcı giriş yapmış ise, son zamanını update ediyoruz.
onlines(); // Online kullanıcıların gösterilmesi.
}
|
Bağlantı nesnemizi ve Page_Load methodumuzu oluşturduktan sonra ilk methodumuzu yazmaya başlayalım.
Aşağıdaki method ile eğer kullanıcı giriş yapmış ise, kullanıcının her faaliyetinde, veritabanındaki süreye şimdiki zamanın 10 dakika fazlası değerini vermeyi sağlıyoruz.
private void updatetime()
{
if (Session["id"] != null)
{
OdbcCommand update = new OdbcCommand("Update users set lasttime = " + DateTime.Now.AddMinutes(10).ToString() + " where id = " + Session["id"].ToString() + "", conn);
try
{
conn.Open();
update.ExecuteNonQuery();
conn.Close();
}
catch(Exception ex)
{
durum.Text = ex.Message;
}
}
}
|
Şimdi Sıra Online kullanıcıların gösterilmesine geldi.
private void onlines()
{
DateTime dt = new DateTime();
onlineusers.Text = "";
conn.Open();
OdbcCommand show = new OdbcCommand("Select * from users", conn);
OdbcDataReader reader = show.ExecuteReader();
while(reader.Read())
{
dt = Convert.ToDateTime(reader["lasttime"].ToString());
if (dt > DateTime.Now) // Eğer Veritabanındaki zaman şimdiki zamandan öndeyse kişi online değilse offline dır.
{
onlineusers.Text += reader["username"].ToString() + ", ";
}
}
conn.Close();
if (onlineusers.Text == "")
onlineusers.Text = "Yok";
}
|
Üye girişi şeklinde hazırladığımız örneğimizin sisteme giriş kısmına geldik ve bunun için yazacağımız method Button1_Click.
private void Button1_Click(object sender, System.EventArgs e)
{
OdbcDataAdapter finduser = new OdbcDataAdapter("Select * from users where username = " + username.Text + " AND password = " + password.Text + "", conn);
DataTable dt = new DataTable();
finduser.Fill(dt);
if (dt.Rows.Count != 1) // Giriş Başarısız.
{
durum.Text = "Geçersiz Kullanıcı";
}
else // Giriş Başarılı(Session oluşturuluyor, Veritabanında update yapılıyor ve Online kullanıcılar gösteriliyor)
{
Session.Add("id", dt.Rows[0]["id"].ToString());
updatetime();
onlines();
Panel1.Visible = false;
durum.Text = "Giriş Başarılı";
}
}
|
Şimdi sıra uygulamamızı denemeye geldi. Hemen giriş yapıyoruz ve sonuçları görüyoruz.
Giriş Yaptığımız Andanki Zaman : 25.05.2005 12:06:xx
Giriş başarılı ise...
Şimdi son olarak veritabanındaki son zaman değerine bakıyoruz.
Gördüğünüz gibi veritabanındaki son zaman şimdiki zamandan 10dk ileride.
Umarım yararlı bir makale olmuştur.
[email protected]
Makale:
Kişi Bazlı Online Kullanıcılar ASP.NET Emrah Yiğit
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|