Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > C# & ASP.NET
  Aktif Konular Aktif Konular RSS: Session Problemi ve Çözümü
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

Session Problemi ve Çözümü

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
turknetyazilim Açılır Menü Göster
Moderator Group
Moderator Group
Simge

Kayıt Tarihi: 18.Ocak.2008
Bulundugu Yer: Balıkesir
Online: Sitede Değil
Gönderilenler: 214
  Alıntı turknetyazilim Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Session Problemi ve Çözümü
    Gönderim Zamanı: 11.Temmuz.2010 Saat 17:57
Merhaba;
 
arkadaşlar bir kaç gündür bununla uğraşıyordum bir çözüm yolu buldum paylaşayım dedim.Asp.net ve Session ile uğraştığınız zaman bu session bazen uyuzkuk yapıyor.
 
Bilindiği üzere sessiondaki bir değişkene değer atandığı zaman o değer  tarayıcı kapanana kadar veya session manuel olarak Session.Abandon(); komutu ile sonladırılına kadar orda tutulur.
 
diyelim ki üyeler isminde bir tablonuz var.alanlar ve tipleri şu şekilde
üyeno otomatik sayı
kullaniciadi varchar(50)
parola varchar(50)
üyeonlinemı bit
 
 
bu tabloya göre kullanıcı giriş yapacak ve giriş yaptığında online olacak. yani bilgiler doğrulandıktan
sonra üye giriş yapmıştır ve artık online dır.
update üyeler üyeonlinemi=1 where üyeno=X
 
daha sonra  online üyeleri getiren sql de şu şekilde olsun
select * from üyeler where üyeonlinemi=1   bu sorguda online üyeleri getirir.
 
 
şimdi üye çıkış yaptığında yani tüm sessionları öldürdüğünde.
bunu mesela bir butonun click eventinde yaptığımızı düşünelim
o üye artık çıkış yaptığı için artık online değildir. ve üyeonlinemi alanı=o olmalıdır.
bunuda diyelim bir linkbutton un(Çıkış butonu) click eventine yazdığımızı düşünelim.
Sessionları sonlardırmadan önce üye yi online durumundan düşürmemiz lazım.
yani şöyle bir sql işleyecek.
update üyeler üyeonlinemi=0 where üyeno=session[üyeno] gelecek
şeklinde. buraya kadar herşey güzel.çıkış olayını adam bizim koyduğumuz linkbutona tıklayıpta çıkarsa sorun olmuyor. ama kalkıpta bizim koyduğumuzdan butona tıklamayıpta tarayıcıyı kafattığında ozaman bizim
update üyeler üyeonlinemi=0 where üyeno=session[üyeno]  çalışmıyor.
yani üyemiz hale online gözüküyor.Bu yanlış
Bunun için global.asax dosyasında farklı eventleri inceledim
fakat hiçbirim işimi görmedi.
 
 
Örnek mesela
Session_end olayı burda ben
update üyeler üyeonlinemi=0 where üyeno=session[üyeno]
böyle bir kod işletmeye kalktığımda zaten session öldüğünden session daki değere erişemiyorum.
O bende aşağıdaki gibi bir kod geliştirdim.
İlk düşündüğüm şuydu.
Acaba ben ie yi kapattığımda hangi olay tetiklenir.Kürşat hocamın gönderdiği bir javascript kod aklıma bir fikir getirdi.Dedim buldum.
o event Page nesnesinin unload yordamıydı.
Şimdi bu kadar hikayeden sonra Coding...Big smile
 
Öncelikle projenizde bir masterpage ve bu masterpage i kullanan bir default.aspx sayfanızız olduğunu varsayayıroum.Bu işlemi Page nesnesinden yapmamız lazım.Gidipte masterpage de yapamayız.Çünkü masterpage bir usercontrolden türemiştir.ve Page nesnesinin özelliklerini,yordamlarını vs taşımaz.
 
Default.aspx Code Behind

protected void Page_Load(object sender, EventArgs e){

if (!Page.IsPostBack){this.Unload += new EventHandler(Default_MainPage_Unload);}

}

 

void Default_MainPage_Unload(object sender, EventArgs e){

if (Session["üyeno"] != null){

burda sql sorgunuz işleyecek : update üyeler üyeonlinemi=0 where üyeno =sessiondaki üyeno

}

}

bunları yaptıktan sonra artık kullanıcı üye girişi yapıp sizin koyduğunuz çıkış butonuna tıklamayıp gidip tarayıcıyı bile kapatsa online durumundan düşecektir.
herkese iyi çalışmalar.
written by iso
 
Yukarı Dön
turknetyazilim Açılır Menü Göster
Moderator Group
Moderator Group
Simge

Kayıt Tarihi: 18.Ocak.2008
Bulundugu Yer: Balıkesir
Online: Sitede Değil
Gönderilenler: 214
  Alıntı turknetyazilim Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 12.Temmuz.2010 Saat 12:12
Arkadaşlar yukarıdaki çözümde postback den çaktı.
En sağlam kodu veriyorum.Kesin. Çözüm % 100 çalışıyor

<script language="javascript" type="text/javascript">

window.onbeforeunload = function() {

if((window.event.clientX<0) || (window.event.clientY<0))

{

document.getElementById('ctl00_LoginControlBox1_hpLogOff').click();

}

}

</script>

'ctl00_LoginControlBox1_hpLogOff' bu isim güvenli çıkış butonun html tarafındaki ismi ve ben usercontrol içersinde olduğu için bu şekilde bir ismi var sizde değişik olabilir.
Yukarı Dön
h.cetiner Açılır Menü Göster
Newbie
Newbie
Simge

Kayıt Tarihi: 13.Temmuz.2010
Online: Sitede Değil
Gönderilenler: 20
  Alıntı h.cetiner Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 13.Temmuz.2010 Saat 16:16

senden başka cevap yazan yok mu ismail?

tesadüf,şans ve kaos: kurulu sistemlerin insanın denetleyemeyeceği bir düzende işlediklerinde kullanılan terimlerdir.
Yukarı Dön
turknetyazilim Açılır Menü Göster
Moderator Group
Moderator Group
Simge

Kayıt Tarihi: 18.Ocak.2008
Bulundugu Yer: Balıkesir
Online: Sitede Değil
Gönderilenler: 214
  Alıntı turknetyazilim Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 14.Temmuz.2010 Saat 10:38

Hocam cevap yazmaktan çok murat abiyle burda kod kapıştırıyoruz:)

Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,320 Saniyede Yüklendi. [power by : WebWiz]