IIS6 下的 一些傳說中的稀奇古怪的問題

來源:互聯網
上載者:User

IIS6 比IIS5 的應用程式集區強大,操作也略微複雜了一些,不過還好,翻譯的還行……能看懂

但是網上有很多類似的例子,比如說:Session丟失了一類的稀奇古怪的問題。最近在寫一個ajax應用,結果也碰上了這個問題。不過具體的說,我的問題的表象不是session丟失,而是application緩衝的近乎於隨機的數值改變~

事情是這樣的:我在application中存放了一個多維陣列表示一個資料表,又放了一個表示該緩衝最近一次更新的時間的字串/日期變數。程式每次調用緩衝數組的時候,都先檢測一下緩衝更新的時間與現在的時間差是否已經達到了需要更新的大小,如果是,則先重新訪問資料庫重新整理緩衝,然後再從緩衝數組中讀取資料。結果就開始搞笑了……

我看到了更新時間在剛剛重新整理過緩衝之後,會變成另外一個時間,有可能跟目前時間早2~3分鐘,也有可能會晚2~3分鐘,有時卻又差不多。這還好,最可氣的是剛剛做過的資料庫的更新,在緩衝中竟然沒有被體現,但多重新整理幾次以後,會有一次、兩次正確,時間略久一些,就沒什麼錯了,怎麼刷都能正確體現。除此之外,還有一個情況就是,用XMLHttpRequest(以下簡為XHR)擷取伺服器端資料時,因為伺服器端通過Cookies + Session 驗證許可權,經常導致XHR擷取時出現:您無權訪問資源!但有時又是可以的。起初以為是XHR傳遞SessionID Cookie的問題,沒有跟前面的緩衝的問題聯絡到一起考慮,否則應該不會困擾我這麼久了 ……

鬱悶了好久。只好放下這個事情,先集中精力搞編碼的問題。周3把編碼問題搞定了,程式經過昨天調試,已經基本無大錯了。於是又回到這個問題上來。

1.監視session

監視session.sessionid 時發現,幾次提交不在同一個sessionid 下,說明讀取了不同的session !通過查看request.servervariables("HTTP_Cookie")進而發現,居然有5~6個 aspsessionid的cookie存在 -_-!!

因為已經看到了aspsessionid的cookie名稱,於是想通過 response.cookies(aspsessionid的名稱)=""  來清除多餘session,結果報錯:受保護的cookie無法修改。

後來發現sessionid不同時,application緩衝中的緩衝更新時間也不相同,但基本上是一一對應的~ 我汗~~從來沒有碰到過這種情況……問了我們技術頭,也未果。

2. 問題原因

在網上一搜,發現有很多丟失session的問題,但基本上沒有像我這種有n個session的……死馬當活馬醫吧,於是想到寫緩衝存取部分的時候曾經注意到 IIS 的AppPool設定裡有回收背景工作處理序這一說~預設是20分鐘,被我發現以後改到了1740分鐘……因為application緩衝也跟session緩衝似的20分鐘一清空,多不爽哦

 

翻到了第二個標籤,偶然看到下面的最大背景工作處理序數 = 5(預設應該是1,貌似是上次修改回收進程時間的時候改了)。ps: 空閑逾時那個項目,預設是勾選的,與前面的回收背景工作處理序的時間有一些關係。被我取消了。

看到這個,恍然大悟,一切的一切都是因為多個請求被自動平均分配到了5個進程上,5個背景工作處理序互相獨立: session 、application 變數都是獨立的,完全相當於5台伺服器的dns負載平衡 -_-!!

3 . 解決方案

把最大背景工作處理序數重新設定為1,即可解決諸如:session丟失、application緩衝隨機重設等貌似離奇的問題。

最大背景工作處理序數>1 的優點在於,對於伺服器的請求可以自動分配到獨立的進程中,單獨串連資料庫或者訪問其他資源,一旦一個進程中發生死結或者引起效能瓶頸的操作,其他進程依然可以獨立運行,互不影響。如果要類比多網站非粘性使用者會話解決方案的話,把最大背景工作處理序數調整為1以上是個不錯的辦法 -_- 這時就必須得用其他方法來維持使用者會話:比如單獨的登入伺服器/群、第三方軟體、資料庫Session、使用對稱式加密的session id附加在url上或者放在form 的hidden input 裡 等。

4. 後記

又碰到了CSDN的搞笑驗證碼,汗一個……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.