【转】ASP.NET之 关于触发Global.asax Session_End事件的经验
| 在做asp.net編程開發(fā)的時(shí)候,我遇見這樣的問題,一個(gè)用戶只能在一臺機(jī)器上登錄, 如果有用戶在其他機(jī)器上登錄,系統(tǒng)將提示該用戶已經(jīng)登錄!當(dāng)前登陸非法!我的做法是: 用Application變量保存已經(jīng)Login的用戶信息,當(dāng)Session_Start的時(shí)候,在Global.asax 文件里寫Session_Start事件響應(yīng)函數(shù),記錄登錄用戶!當(dāng)用戶Logout的時(shí)候,在Session_End 事件里,將Application變量中的用戶信息做一個(gè)休正,即:清除SessionEnd的用戶信息。 問題出現(xiàn)了!Session_End無法執(zhí)行???為什么呢?后來看了幾篇文章,做了試驗(yàn),得出以下 結(jié)果,要讓Session_End事件響應(yīng),需要做以下工作:???????? 首先在web.config文件中需要有以下設(shè)置: <sessionState Session_End只在mode="inProc"模式下觸發(fā),timeout決定該事件的觸發(fā)時(shí)間, 一般情況下,timeout是指Session失效的時(shí)間,我在自己設(shè)計(jì)的asp.net應(yīng)用系統(tǒng)中, 使用Form校驗(yàn)方式,不需要Session來判斷用戶是否登錄,所以設(shè)置timeout=1分鐘, 不會(huì)影響正常操作,但是如果用戶設(shè)計(jì)的系統(tǒng)使用Session來保存用戶登錄信息, 設(shè)置timeout=1,那么打開瀏覽器后,當(dāng)用戶在1分鐘內(nèi)不在該瀏覽器上進(jìn)行操作, Session就會(huì)失效,這可能導(dǎo)致系統(tǒng)使用的不正常!對于一般用戶而言,對著屏幕 看1分鐘后,又要重新登陸一次,是個(gè)十分惡心的事情! ? ?????????? 因此,如果使用Session來保存用戶登錄信息,建議采用其他方式! 比如在每個(gè)Page上做一個(gè)onunload事件響應(yīng)函數(shù),如:oncloseIE(),當(dāng)瀏覽器關(guān)閉的時(shí)候, oncloseIE()執(zhí)行,在oncloseIE函數(shù)里使用ajax方式,調(diào)用后臺的server端函數(shù),執(zhí)行 Session.Abandon(); 這樣的方法將是最直接,最及時(shí)的Session End處理! |
總結(jié)
以上是生活随笔為你收集整理的【转】ASP.NET之 关于触发Global.asax Session_End事件的经验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:许洪波,男,博士,中国科学院计算技
- 下一篇: 《大数据》期刊“农业大数据”专刊征文通知