session超时问题
? ? ? ?在做系統的時候,如果我長時間沒有去理會他的話,就會遇到一個問題,就是session超時的問題。造成這個問題原因就是:用戶登錄時間過長,沒有進行操作。進而造成了session的超時之后自行銷毀。所以如果我們做了相關方面的處理還好,但是如果沒做的話就會報出“未將對象引用到實例”的錯誤。
上述說道了session,也許您會認為為什么會是session的問題呢?接下來對session進行一下了解與認識。
session簡介:
? ? ? ?session:他是ASP的內置對象,用于提供ASP.Net應用程序中必需的功能。當然不只只是ASP.net中,像java中有。session,被稱為“會話”。Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。以及如果需要的話,可能還有一定的操作空間。
? ? ?Session功能:
? ? ? 1.可以進行時間限制
? ? ? 2.記錄用戶當前的狀態
? ? ? 3.存儲用戶的信息
? ? ? 4.可以存儲數據,便于數據的比較與傳輸。
? ? ? 以上是根據個人平時使用得出來的。對session的介紹就到這里,如果想要更多的了解,可以上網去查更多的資料。
解決超時問題的方法:
? ? ? ? session引起超時問題,主要有兩個條件:第一:長時間;第二:未操作。
解決方案一:
? ? ? ? 在用到session的后臺寫上:
if (!IsPostBack){if (Session["admin"] == null){Response.Write("<script>alert('您還沒有登陸或者登陸已超時');parent.window.location.href='../ManagerMain.aspx'</script>");}else{Session.Timeout = 30;//超時時間為30分鐘this.txtLoginId.Focus();}}
? ? ? ?這樣寫的話就是如果session超時了,就彈出對話框,讓您重新登錄,或者關閉窗體。但是如果我有10個窗體都用到了session,那么我10個窗體都要這樣寫嗎?超過三次就要好好想想了。
解決方案二:
? ? ? ? 在web.config中進行設置,填寫以上代碼
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="1800"/>
? ? ? ? 這個是可以解決超時問題的。同時采用這種方式,不管Cookie還是隱藏表單字段都用不著。所以,即使網頁中沒有使用表單,也能加入會話。
? ? ? ?但是這種方法,應用程序的狀態將依賴于Asp.Net進程,當IIS進程崩潰或者正常重啟時候,保存在進程中的狀態將丟失。
解決方案三:
? ? ? ? 同樣在Web.config中進行設置
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/>
? ? ? ? “mode=‘StateServer’”,也就是將回話數據存儲到單獨的內存緩沖區中,再由單獨一臺機器上運行的Windows服務器來控制這個緩沖區。以上代碼的“StateConnectionString”屬性指定了服務所在的服務器以及要監視的端口。這樣的模式,使得會話的狀態的存儲將不依賴于IIS進程的失敗或者重啟,然而一旦狀態服務終止,所有會話數據都會丟失。因為他知識將數據存儲在內存中。
解決方案四:
? ? ? ? 用SQLServer進行管理。
<system.web> <sessionState mode="SQLServer" sqlConnectionString="data source=localhost;user id=sa;password=sa" cookieless="false" sqlCommandTimeout="20" timeout="20"></sessionState> </system.web> ? ? ? ? 以上方法并沒有嘗試過,但是從邏輯上考慮應該是行得通的,這個就是講session數據存儲到一個數據庫服務器中。通過數據庫存儲會話狀態,可以分貝針對擴展性以及可靠性來有效地平衡性能。這樣可以為應用程序提供極大限度的可靠性。
? ? ? ? 以上四種方法是對session超時的解決方案的總結,前三個經過嘗試還是比較成功的。雖然對session知識皮毛的認識,但是只有當我們去使用的時候,才會對他進行更深入的了解,才會知道他的功能的強大性。
總結:
? ? ? ?條條大路通羅馬,當時我在解決此問題的時候,腦子中只有一個想法就是:前人(淘寶天貓)肯定遇到過,這個問題肯定可以解決。在最初懵懂的時候,是自己一步一步的進行調試代碼,得知問題根源,然后尋找解決方案。當問題來臨的時候,我們不要害怕,不要沒有頭緒的去解決去猜想,最重要的就是發現問題的根源,然后去尋找解決方案。這應該是正確的解決問題的思路。
? ? ? ?學習ing....
總結
以上是生活随笔為你收集整理的session超时问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apt-get 获取源码的方法
- 下一篇: mybatis学习(52):扩展结果的展