由于本人一直未碰到這個問題,今晚在給"火星菜鳥"分析時,得出一些結論,以提供給需要這方面資料的朋友們.
首先,系統頻繁踢人不是程序問題,至少我在分析代碼的過程中沒發現.出現這種情況的大多數是把風訊系統放到了虛擬主機上,空間提供商為了顧全自身服務器的安全運作,在一些設置上采取保護措施.比如對"應用程序池"實行限時回收.經過跟蹤測試我發現,登陸風訊系統后默認情況下可以遍歷到8個Sesstion變量:
GetCode
被踢的要害原因在于系統的三個要害Session被釋放了.
Session("Admin_Name") ,Session("Admin_Pass_Word"),Session("Admin_Is_Super"),Session("Admin_Pop_List")
Session會無故丟失嗎?因為用戶一般是在不停地操作中被踢的,所以可以排除Session超時的可能(除非部分程序采用了window.open的方式打開窗口,這在少數情況下會發生Session、Cookies丟失的現象)。另外,Session超時時間被設定成10分鐘,不會這么快就超時的。
排除以上可能,我們進入下一步:
設置性能應用程序池設置
打開 IIS 治理控制臺,單擊加號展開本地計算機。
單擊加號展開“應用程序池”文件夾。
右擊適當的應用程序池,然后單擊“屬性”。出現應用程序池的屬性對話框。
單擊“性能”選項卡,然后設置適當的應用程序池設置。
應用程序池“屬性”對話框的“回收”和“性能”選項卡分別如下圖:
此主題相關圖片如下:
此主題相關圖片如下:
請分別按上圖所示設置。使用虛擬空間服務商提供服務器的朋友請聯系服務商進行相應設置。一般情況下應用程序池回收后服務器系統日志里面會記錄以下日志:
警告信息:這樣的話服務器會清空所有采用該應用程序池的站點的Session對象。
按照常規,虛擬空間服務商不會把"應用程序池"設置為"空閑超時"多少分鐘而進行回收工作。我估計一般會設置成"內存回收",也就是說,該"應用程序池"下的站點消耗內存達到服務商設置的底線時,服務器就進行應用程序池回收工作。因為我在幫"火星菜鳥"測試時發現,我用自己的代碼測試比用風訊系統時被踢的次數明顯很少,但也經常被踢。我只是模防被踢原理測試了一下。以下是測試代碼:
文件 test.asp
<%
Session("SessionTest") = "Ksir"
Response.Redirect("view.asp")
%>
文件 view.asp
<meta http-equiv="refresh" content="1">
<%
Response.Write(Session("SessionTest"))
%>
把這兩個文件放到服務器上進行測試時,我得出結論是:服務商在應用程序池上做了手腳。而且"火星菜鳥"的虛擬服務器一個應用程序池PID所對應的站點數目很多,這是很消耗系統內存的。9
新聞熱點
疑難解答