Asp.net

ASP.NET 會話意外結束

  • March 19, 2015

我在 ASP.NET 2.0 上的會話有一個非常奇怪的問題。我正在使用的系統使用會話變數來儲存對象(如問題和答案)的參數以生成報告。這些是同名類的實例,因此它們填充有如下參數:

此報告是通過 4 個 aspx 頁面生成的。首先定義位置和日期參數,第二頁儲存問題,第三頁儲存答案。最後一個顯示指向生成的 Excel 和 HTML 格式報告的連結。所有變數數據都儲存在會話中,一切順利,直到最後一頁,當像 Session.Abandon() 這樣的事情發生時,Session_End 事件被觸發並且所有變數都失去了。對於每個第一次使用報告的登錄使用者,這種情況每天只發生一次,然後您可以整天嘗試數十次,並且不會再看到它。

問題總是發生在同一頁面上,會話模式是 InProc。

我已經完成了以下驗證:

  1. 檢查是否有任何 Session.Abandon() 或 Session.Clear() 命令。沒有了。
  2. 檢查會話超時,它設置為 18 分鐘,並且問題隨時發生,如上所述,無論您在 18 分鐘內使用了多長時間。
  3. 檢查表單超時,在身份驗證下。它也設置為 18 分鐘。
  4. 我了解到 Server.Transfer() 存在一個錯誤,有時可能會刷新會話和視圖狀態,並已替換為 Response.Redirec()
  5. 逐行監視會話,一切順利,當頁面完全載入時,它就死了。所有變數都消失了,但會話仍在工作。
  6. 就我而言,IIS 配置正確。我無權訪問它,但所有其他系統都可以正常工作。
  7. 還分析了一些上述系統,以尋找可能發生的一些線索,但它們的 web.config 文件與我遇到的問題非常相似,並且沒有實現特殊程式碼來以不同方式與會話互動。
  8. 還考慮過監視 IIS 以發現應用程序重新啟動,但我很確定它不會超過預設限制 15。不過,我無法訪問 IIS 伺服器,並且在我的電腦上完成的所有測試都使用 ASP.NET Development Server . 問題發生在兩者上。
  9. 已檢查程序回收的可能性,例如 .config 和 asax 文件更改,對 bin 目錄的更改,沒有發生。

以下限制適用:

  1. 由於公司政策,無法將會話模式更改為 InProc 以外的其他模式。
  2. 報告生成“過程”是通過 4 個頁面創建的。我不同意這一點,但由於時間和預算限制,無法重做。

任何想法或解決方案都是有幫助的。對於任何必要的更新和測試,我會保持聯繫。

我要感謝大家的努力!

我和我的團隊發現了這個案子的情況。有一種方法可以刪除網站文件夾中的臨時文件和目錄,從而導致回收和會話刷新。該程式碼正在計算日期和時間,並且應該每 24 小時刪除一次目錄,因此當使用者首次登錄系統並生成報告時,它會刪除目錄並刷新會話。

幾個建議:

  1. 在本地調試第一個命中,看看路徑中是否有任何獨特之處。
  2. 確保第一次命中不會導致工作程序出現問題
  3. 確保在回發之前沒有使用會話值

我認為正在發生的是#3。您在會話中設置值,然後在回發之前從該會話中使用它們,會話值實際儲存在該會話中。由於它僅在第一次嘗試時發生,因此症狀反映了這種懷疑。如果我是正確的,您可以通過從使用會話值而不是設置會話的同一位置進行使用來解決此問題,然後嘗試在同一請求中從中提取。

引用自:https://stackoverflow.com/questions/6508424