Sayfayı Yazdır | Pencereyi Kapat

Session Problemi ve Çözümü

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: C# & ASP.NET
Forum Tanımlaması: C# ve ASP.NET ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=1947
Tarih: 19.Haziran.2025 Saat 19:28


Konu: Session Problemi ve Çözümü
Mesajı Yazan: turknetyazilim
Konu: Session Problemi ve Çözümü
Mesaj Tarihi: 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
 



Cevaplar:
Mesajı Yazan: turknetyazilim
Mesaj Tarihi: 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.


-------------


Mesajı Yazan: h.cetiner
Mesaj Tarihi: 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.


Mesajı Yazan: turknetyazilim
Mesaj Tarihi: 14.Temmuz.2010 Saat 10:38

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



-------------



Sayfayı Yazdır | Pencereyi Kapat