Session Problemi ve Çözümü |
Yanıt Yaz |
Yazar | |
turknetyazilim
Üye Profili
Özel Mesaj Yolla
Bu kullanıcıya ait mesajları bul
Üyenin Web Sitesie Git
Arkadaş Listeme Ekle
Moderator Group Kayıt Tarihi: 18.Ocak.2008 Bulundugu Yer: Balıkesir Online: Sitede Değil Gönderilenler: 214 |
Alıntı Cevapla
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...
Ö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
|
|
turknetyazilim
Üye Profili
Özel Mesaj Yolla
Bu kullanıcıya ait mesajları bul
Üyenin Web Sitesie Git
Arkadaş Listeme Ekle
Moderator Group Kayıt Tarihi: 18.Ocak.2008 Bulundugu Yer: Balıkesir Online: Sitede Değil Gönderilenler: 214 |
Alıntı Cevapla 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. |
|
h.cetiner
Newbie Kayıt Tarihi: 13.Temmuz.2010 Online: Sitede Değil Gönderilenler: 20 |
Alıntı Cevapla 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.
|
|
turknetyazilim
Üye Profili
Özel Mesaj Yolla
Bu kullanıcıya ait mesajları bul
Üyenin Web Sitesie Git
Arkadaş Listeme Ekle
Moderator Group Kayıt Tarihi: 18.Ocak.2008 Bulundugu Yer: Balıkesir Online: Sitede Değil Gönderilenler: 214 |
Alıntı Cevapla Gönderim Zamanı: 14.Temmuz.2010 Saat 10:38 |
Hocam cevap yazmaktan çok murat abiyle burda kod kapıştırıyoruz:) |
|
Yanıt Yaz |
Forum Atla | Forum İzinleri Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |