2010年4月20日 星期二

日前一直遇到session會無故不見了的問題,爬文後找到這篇參考資訊,覺得整理的真的很詳細,為了日後不用再重新去找,所以把它節錄到我的部落格中,也和我的朋友們一同分享

  1. web.config裡的sessionState timeout屬性,單位是分鐘,如果該Session頁面idle超過這個設定,Session值就會不見。
  2. Code裡面執行了清除Session的動作,如Session.Abandon()、Session.Clear()、Session.RemoveAll()
  3. window.open與window.showModalDialog混合使用
  4. 機器名稱含『底線』
  5. IIS Application Pool中處理序數目設定
  6. web.config異動、dll異動、虛擬目錄的刪除與更名導致Dynamic Compilation
  7. Session因為cookieless互相干擾(感謝gipi哥的補充)
  8. 防毒軟體掃瞄(感謝gipi哥的補充)

結論

Session消失的問題,總是很麻煩,
通常都是在User-site的機器,『偶爾』跟『不知道為什麼』會出現Session值掉了的問題,不容易模擬出一樣的環境,
不管是因為時間、機器名稱設定、UI操作行為、IIS站台設定、虛擬目錄架構問題,都是不容易模擬和發現的錯誤。

引用出處來自這位微軟MVP的網誌

javascript的showModalDialog與window.open造成session遺失的問題

Session掉了有很多種可能,

不過如果程式裡面有用到javascript進行開窗的動作,

那就很有可能是因為混著用showModalDialog跟window.open導致session遺失。

簡單來講,就是

ShowModalDialog之後,不能用window.open來開窗,否則新視窗裡面無法讀取Session

簡單的例子,混著用這兩種開窗:

open 代表 window.open
modal 代表 window.showModalDialog


Y = session 還在
N = session 不見了

連續開窗使用方式 Session是否仍然存在
open/open/open Y/Y/Y
modal/modal/modal Y/Y/Y
open/modal/open Y/Y/N
modal/open/modal Y/N/N
open/modal/modal Y/Y/Y