標籤:blog http io ar os sp for strong 檔案
公司已經在production的一個project最近有client反饋說登陸進網站之後,開著一整天沒動它,之後還是可以繼續操作。client那邊的IT部門要求我們提供session time out方面的設定,以及工作原理。自認為做了5年的web application,clients這個基本的要求可以很快搞定。
1. 檢查Web.config檔案裡面的timeout設定
在system.web下面的sessionState中,可以設定timeout屬性。項目中,發現同事把這個值設成了7200。這個數位單位是minute,同事錯以為是second,想設2個小時,卻設成了5天。
本以為這個就解釋了為什麼client開著一整天不去動,之後還可以繼續操作的問題。但是後面又接到反饋說,那個網站並不可以開著5天不會time out,有client開著一天多,就time out了。為什麼呢?
2. 檢查IIS Application Pool的Idle time out設定
這個設定的作用是,application pool在設定的時間範圍內沒有收到任何請求,就把網站的session time out。預設值是20 minutes。因此,當網站只有一個user登陸進來,之後的20分鐘他沒有發送任何請求給伺服器,而且這20分鐘內沒有其他user來訪問,那麼這個user在20分鐘後就會time out,而不是web.config設定的5天。
3. 檢查IIS Application Pool的Recycling設定
Regular Time Interval這個設定的作用是,IIS在設定的時間到期後,會強制回收所有的資源,進而導致網站session time out。預設值是1740 minutes。很可能這個1740分鐘,也就是29小時,是讓user time out的原因。前面的Idle time out的值不可以超過這個值。
如果到目前為止我理解都正確,那麼一個流量很大的網站,24小時不間斷會有使用者訪問,那每隔29個小時,在recycling期間登入使用者的session會丟失。
為了追蹤user time out的準確時間,我在global.asax中的session_start和session_end中寫入了文本log。需要注意的一點是,這個文本log不可以放在網站所有目錄。因為每次網站目錄中內容更改會觸發session time out。這點讓我花了很多時間去google才明白。
期待這個log的結果...
參考連結:
http://issuesdotnet.blogspot.sg/2012/06/directorydelete-expires-session-solved.html
http://forums.asp.net/t/1742313.aspx?session+expired+problem+after+deleting+a+folder+and+its+sub+folder+programatically+in+asp+net
http://www.thecodeking.co.uk/2011/08/why-sessionend-is-sometimes-called.html#.VG2skYuUfzl
http://stackoverflow.com/questions/19002254/what-is-the-default-expiration-time-of-a-cookie
http://erlend.oftedal.no/blog/?blogid=41
http://stackoverflow.com/questions/19985710/iis-idle-timeout-vs-recycle
http://technet.microsoft.com/en-US/en-en/library/cc771956(v=ws.10).aspx
http://bradkingsley.com/iis7-application-pool-idle-time-out-settings/
http://weblogs.asp.net/owscott/why-is-the-iis-default-app-pool-recycle-set-to-1740-minutes
淺談asp.net session time out問題