台灣最大程式設計社群網站
線上人數
1432
 
會員總數:246690
討論主題:190103
歡迎您免費加入會員
討論區列表 >> ASP.NET >> web.config 的 sessionState 的 timeout 屬性不準
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
web.config 的 sessionState 的 timeout 屬性不準
價值 : 20 QP  點閱數:19640 回應數:14
樓主

Stephen Wu
高級專家
7424 113
5959 1237
發送站內信

各位大大大家好,
小弟之前有一個 ASP.NET 2.0 的系統,在使用者登入後,會將登入資訊寫到 Session 中。

大家都知道,在 web.config 中,sessionState timeout 預設為 20 分鐘,
在隨 VS 2005 安裝的 MSDN Library 中也有講:

ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.VisualStudio.v80.cht/dv_aspnetcon/html/a6cb2e3a-df49-4b12-9d9a-eed45541c165.htm

但經小弟實際測試,將 sessionState timeout 改設為 70 分鐘,
使用者在登入系統後,30 分鐘沒有任何動作,Session 還在;
關掉 IE,再重新登入後,若是 40 分鐘沒有任何動作,Session 就不見了。

也就是說,web.config 中的設定(如下):

sessionState timeout 的設定值好像不準,使用者實際閒置時間,只能是該值的一半。

例如若設為 70 分鐘,使用者事實上只能閒置 30 分鐘多一點點;閒置到 40 分鐘時,Session 就會不見。
而並不會真的像我們在 web.config 中做的設定值,能讓使用者閒置到 70 分鐘那麼久。

上述情況,是經過小弟我反覆測試,設定過各種超過預設 20 分鐘的數值後再反覆測試。
若網友們想測試的話,建議應在 web.config 中該值,要設定成比預設值 20 大。

小弟我因該專案沒用到 Global.asax,因此沒在該設定檔試過,只在 web.config 試過的結果是這樣。

請有遇到相同情況的大大,提供您寶貴的意見。
也歡迎其他大大測試看看。

-------------------------------------------

附註:
小弟我在 IIS 虛擬目錄(網站也有),的「主目錄」頁籤,的右下方有一個「設定」Button 裡,
的「選項」頁籤裡,發現有一個可能也有關的設定,叫做「工作階段等候逾時」,
可在那裡面設定分鐘數。

執行畫面如下圖檔:
http://j2se.myweb.hinet.net/job/session.jpg

但小弟我將該值設很小,並閒置超過該分鐘數後,發現 Session 仍在,
因此該設定應與 Session 無關。

若有大大知道 IIS 該設定是幹麻的,麻煩請告知,
先謝謝。

搜尋相關Tags的文章: [ Session ] , [ timeout ] ,
本篇文章發表於2007-09-24 20:00
== 簽名檔 ==


1樓
作者回應

Stephen Wu
檢舉此回應
有興趣測試的大大,
可寫個簡單的網頁,
使用者登入後,隨便寫個值到某個 Session,

然後在該頁,或別頁中的 Page_Load() 中,
判斷若該 Session 為 null 時 (VB.NET 好像是叫 Nothing 吧?),
亦即使用者的 IE 瀏覽器,若已閒置超過 web.config 的 sessionState timeout 設定值時,
就 Response.Redirect 到首頁或登入頁。

----------------

登入頁,若登入成功時:


----------------

在其他任何一頁:


------------------

web.config 的設定:


------------------

會發現,明明設定為 70 分鐘,
但使用者登入後的該個 IE 瀏覽器,只要閒置 40 分鐘,
就會因為 Session["theEmpID"] == null
,而被踢回登入頁面了。
本篇文章回覆於2007-09-24 20:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Stephen Wu
檢舉此回應

請問有其他大大,在專案中也遇到類似的問題嗎?

用戶抱怨 ie 閒置沒多少,就被系統踢出,
但您檢查 web.config 的 Session 設定,
發現時間明明沒設定得那麼短,
結果實際閒置不到一半的時間,
用戶的 Session 就會遺失。

懇請賜教。
本篇文章回覆於2007-09-26 09:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

亞米斯
檢舉此回應
我在 "ASP.NET AJAX 應用剖析立即上手"作者:董大偉 出版社:博碩
這本書有看過 用ajax 可以讓Session 快超過閒置時間 會跳出對話視窗 警告使用者
您可以拿來當作 除虫 的參考
本篇文章回覆於2007-09-26 09:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
會不會是iis重新啟動所致? 請問該web server是win 2003嗎? 若是,您是否有為它新增一個應用程式集區,若沒有,就加一個試試
本篇文章回覆於2007-09-26 09:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Stephen Wu
檢舉此回應
感謝二位回應。

小弟我是 ASP.NET 2.0 + Windows 2003 Server + SQL Server 2005 + IIS 6.0,

IIS 6.0 中,「預設的網站」和底下的「虛擬目錄」,都已有應用程式集區「DefaultAppPool」,
IIS 設定畫面,圖片如下(同本帖發起文,的最下方的圖檔):
http://j2se.myweb.hinet.net/job/session.jpg

測試使用者閒置過程中,小弟我並未修改任何程式碼,也未在作業系統中做任何動作,
就只是讓電腦開著不動,就這樣閒置 30-40 分鐘。

閒置 30 分鐘時 Session 還在,但 Session 會在閒置至 40 分鐘時遺失,
而不會如 web.config 我所設定的 timeout,真的撐到 70 分鐘後才遺失,
這是經過小弟在家、在公司,用同樣的程式碼反覆測試過,
都這樣的情況。

建議大家也測看看,可設個比較短的時間,如:30 分鐘,然後都不要做任何動作(包括修改程式碼),
看看 ie 瀏覽器閒置時,Session 是否真的能撐到 30 分鐘才遺失。

不知其他人是否也有同樣問題?

不知會否是微軟 IIS、ASP.NET 2.0 方面本身的問題?
本篇文章回覆於2007-09-26 11:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

小琳
捐贈 VP 給 小琳 檢舉此回應
:::試試看把web.config和.vb程式做修改(隨便改一個東西,再改回來)
,再存檔,最後再重新執行看看!!!
本篇文章回覆於2007-09-26 11:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小琳
捐贈 VP 給 小琳 檢舉此回應
:::是web.config和網頁的部份做修改,打錯了....^^''
本篇文章回覆於2007-09-26 11:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

Allen
捐贈 VP 給 Allen 檢舉此回應
由於你是用預設的應用程式集區,那麼若該iis裡也建了別的網站或虛擬目錄,而且是asp.net 1.1,應該就會有這類問題, 您不妨先建立一個新的應用程式集區,再在您的虛擬目錄撰用這新的,不要跟別的程式共用試試看
本篇文章回覆於2007-09-26 11:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Stephen Wu
檢舉此回應
回 Allen,
IIS 預設的網站,裡面只有三個虛擬目錄,三個都是放 ASP.NET 2.0 有專案,
沒有 ASP.NET 1.x 的專案。

小弟剛才在 IIS 又開了一個新的「網站」,裡面沒有放虛擬目錄,
只有將該網站的路徑,指到 C:\Inetpub\wwwroot 底下的一個 ASP.NET 2.0 專案,
設定也都是用預設值,如本帖 5 樓,小弟我放的那張圖那樣設定。

結果剛午休完回來,閒置 44 分鐘,新網站的 Session 一樣會遺失,
使用者自動被系統踢出。而無法照預設的,可閒置 70 分鐘。

強烈懷疑 IIS 或 ASP.NET 引擎哪有問題說。

有空小弟再寫個範例放上來,
也請大家測試看看。

若各位測試後也有同樣的情形,就要小心到時候也會有客戶遇到同樣情形,
而抱怨可閒置時間怎麼那麼短,
上個廁所、聊個八卦回來,剛用到一半的系統就不能用了。
本篇文章回覆於2007-09-26 13:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

Stephen Wu
檢舉此回應
小弟剛剛才發現,
原來 IIS 6.0 的最上方,還有一個「應用程式集區」的設定,
剛剛才真的弄懂 8 樓 Allen 大大說的「建立一個新的應用程式集區」的意思。

待會繼續測試。

在猜可能是「應用程式集區」中,「效能」頁籤中,
「閒置等候時間」預設只設定 20 分鐘的緣故 (20分鐘亦為 asp.net Session 的預設值)。

----------------------
以下擷錄自網路上 ppt 檔案,對該設定的描述:
----------------------

自動資源管理
工作處理序回收處理及效能設定

●工作處理序回收處理:
工作時間
使用者提出的Request數量
固定時間週期
記憶體最大使用量
立即要求

●效能設定:
閒置時間
Request Queue
CPU使用量
本篇文章回覆於2007-09-26 13:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

Stephen Wu
檢舉此回應
解答整理:
http://blog.xuite.net/j2ee/coder/13634540

本帖二日後送至知識庫、
分配點數給熱心的大大。
本篇文章回覆於2007-09-27 02:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

Jeff
捐贈 VP 給 Jeff 檢舉此回應
「應用程式集區」的「閒置等候時間」是指 WEB 應用程式資源多久沒有使用時,就進行回收。
因為你是在單機測試,只有單一使用者,所以「應用程式集區」的「閒置等候時間」若小於 Seesion Timeout,
就會以「應用程式集區」的「閒置等候時間」設定時間來回收資源;不過在多人使用的 Web 環境,通常比較不會
有此情形。
本篇文章回覆於2007-09-27 09:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

狐狸
捐贈 VP 給 狐狸 檢舉此回應
哇 還有解答整理 真是認真的作者大大
但我有一點不大明白的就是IIS那邊應用程式集區的閒置等候時間預設是20分鐘
為何作者大大之前的測試卻是 "Session 會在閒置至 40 分鐘時遺失"
這中間是否還有其他因素在干擾??
本篇文章回覆於2007-09-27 10:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

Stephen Wu
檢舉此回應
感謝 Jeff 大的回應。
因為小弟那個系統只是 10 幾個人的小公司的 LAN 內部系統,
因此常發生此種現象。
若是各位大大寫的大系統大case,應就如 Jeff 大講的,
不會有甚機會,因為該集區的資源都沒人要用,而引發 IIS 回收 Process。

回狐狸,
我也不確定,但多次實驗後的結果皆是如此。
我猜是 IIS 可能在 DefaultAppPool 集區的資源,20 分鐘內都沒人用後,
會再還會參考其他因素,才會拖延到 30 幾分鐘後才真的執行回收 Process 的動作。

或許跟 .NET CLR 的 Garbage Collection 機制類似,
即使 instance 被指為 null 或久久沒人要用它,
.NET CLR 仍要等一段時間,而且自己有空閒時,才會真的執行資源回收的動作。
本篇文章回覆於2007-09-27 12:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.