2009-03-07 16 views
10

Sohbet uygulamasında çalışıyorum, HashTable'ın bir değeri olarak Kullanıcı ve İşleç Anahtarını & ChatRoom Sınıfının Nesnesi olarak içeren HashTable'ı kullandım. Asıl sorun, Kullanıcı veya Operatörün tarayıcıyı kapatması veya çıkış yapılmaksızın bağlantısının kesilmesi durumunda, oturumun sonunda otomatik olarak kapatılacaktır.Global.asax'ta oturum sonu nasıl kullanılır?

Lütfen bu konuda bana ve bu konuda Global.asax'ın nasıl kullanıldığına dair bana yardımcı olun.

cevap

14

Web sitenize Global.asax dosyası ekleyin ve Session_End olayında, kullanıcıyı HashTable öğenizden kaldırın. kullanıcının kendi tarayıcı veya kaybetti bağlantıyı kapattığında oturumu bitmiyor,

void Session_End(Object sender, EventArgs E) { 
    // Clean up session resources 
} 

ama dikkat:

protected void Session_End(Object sender, EventArgs e) 
{ 
    // Remove user from HashTable 
} 
+0

Benim hash tablosumda, aynı zamanda Oturum ["UserID"] içerir anahtar içerir, Bu oturum Session_End olayında Logout (string usrid), usrid parametresini geçmek için kullanılır, Herhangi bir fikriniz varsa o zaman lütfen bana yardım edin ... –

+2

Sorunu anlamıyorum. Afedersiniz. – MartinHN

24

Sen beklenmedik bağlantısız kullanıcıyı kaldırmak için Global.asax oturumu uç olayını kullanabilirsiniz. Oturum zaman aşımı ulaştığında biter.

+0

Web Oturumu Zaman Aşımı için Web.config dosyasında değişiklik yaparsam, işe yarar mı? –

+0

no, oturum zaman aşımınızı düşürebilir, ancak tüm uygulamayı beklenmedik bir şekilde etkiler. Belki de sohbet uygulamanızda programlı bir kontrol ayarlayabilirsiniz. Örneğin, bir kullanıcı 5 dakika boyunca herhangi bir işlem yapmazsa, onu bağlantısız olarak kabul edebilirsiniz .. – Canavar

+2

@ ashishbhatt'ın yorumu bana göre doğru. Oturum zaman aşımını çok fazla azaltabilirsiniz (1 dakika) ancak ** en az bir operasyonel AJAX çağrısının kalp atışı (veya canlı tutma) olarak sürekli olarak yapıldığından emin olmalısınız. Bu sadece bir hiledir ve milyonlarca kullanıcıya ölçeklendirmemesi gerekiyor. –

6

Session_End olayı, tarayıcı kapatıldığında tetiklenmez, sunucu belirli bir zaman yayılımında kullanıcıdan gelen istekleri almadığında (varsayılan olarak 20 dakika) yanar. Bu, Session_End'i kullanıcıları kaldırmak için kullanıyorsanız, tarayıcıyı kapattıktan sonra 20 dakika boyunca sohbette kalacaktır.

Son isteğin zamanını kullanıcı nesnesinde tutmanızı öneririm. Bu şekilde, kullanıcının ne kadar aktif olduğunu ve kullanıcının sohbeti ne kadar beklediğini belirleyebilirsiniz. Örneğin, iki dakika boyunca hiçbir şey yapmayan herhangi bir kullanıcıyı pasif olarak gösterebilirsiniz.

Ayrıca, sohbet uygulamasının düzenli aralıklarla sunucuyu sorgulamasına izin verebilirsiniz (bunu daha önce yapmadıysanız). Bu, nesnede son istek süresini günceller ve sohbet penceresi açık olduğu sürece kullanıcıyı canlı tutar.

Kullanıcı sayfadan çıktığında sunucuya oturum kapatma isteği göndermek için tarayıcıda kendload olayını kullanabilirsiniz. Bu elbette, kullanıcının hala net bağlantısı varsa çalışır. Sayfayı yeniden yüklediğinizde, onunload olayı da tetiklenir, böylece olayın neden kullanıldığını tetiklemeniz gerekir.

+1

Teşekkürler Guffa, Eğer onunload olayını kullansaydım o zaman Leave() diyecektim ama o ana problemde butonu yenilediğimde o zaman Leave() diyor , F5, AlterF4, el ile sağ tıklayın, ama tüm tarayıcıda Refresh butonunu nasıl tutabilirim? Herhangi bir fikir varsa lütfen bana yardım edin. –

1

İstemcide her zaman çalışan ve "I'm here" gibi bir sunucuya sinyal gönderen JavaScript'i kullanabilirsiniz. Bir sonraki sinyal gelmezse, Leave();'u arayabilirsiniz. Bunu yapmak için AJAX ile birlikte kullanılır.

İlgili konular