服務熱線
153 8323 9821
在Web.Config文件中加入<sessionState mode="InProc"></sessionState>語句,但 是在關閉IE頁面時好像并未觸發Session_End事件。我實驗了一個用于記錄來訪人數 的小網頁程序,使用了Application["visitor_counter"]變量。首先修改Web.config 文件,將上面的<session...>語句加入其<Configuration><system.web>下。然后在 Session_Start事件中使用如下語句: Application.Lock(); Application["visitor_counter"]=(int)Application["visitor_counter"]+1; Application.UnLock(); 在Session_End事件中使用如下語句: Application.Lock(); Application["visitor_counter"]=(int)Application["visitor_counter"]-1; Application.UnLock(); 最后在default.asp中加入了一個Label元素,將Application["visitor_counter"]信 息以字符串格式輸出。 結果是每打開一次網頁,Application["visitor_counter"]值就增1,但是關閉網頁 并未是其減少1。請問這是怎么回事,如何解決。
回答:
除非程序通知服務器刪除一個session,否則服務器會一直保留,程序一般都是在用戶做log off的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知服務器它將要關閉,因此服務器根本不會有機會知道瀏覽器已經關閉,之所以會有這種錯覺,是大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器后這個 session id就消失了,再次連接服務器時也就無法找到原來的session。如果服務器設置的cookie被保存到硬盤上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的session id發送給服務器,則再次打開瀏覽器仍然能夠找到原來的session。 怎么解決呢? 由于關閉瀏覽器不會導致session被刪除,所以服務器為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,服務器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間。 大概是你關閉及統計需要一定的時間反應,刷新幾下是不是減1了? 要是還沒有,那你通知我,讓我想想是怎么回事