Asp.net

ASP.NET 會話已過期或找不到 -> 因為 Session.SessionID 更改(報告服務)

  • May 20, 2021

1.-我正在使用報告服務,有時ASP.NET session has expired or could not be found在嘗試載入報告時會出現此錯誤。

2.-我意識到即使使用者相同,當 Session.SessionID 屬性更改時也會出現此錯誤。如果它沒有改變,則載入報告。我的意思是,如果我多次刷新報告,只要 Session.SessionID 與最後一個相同,就會載入報告。

3.-微軟文件說:

使用基於 cookie 的會話狀態時,ASP.NET 在使用 Session 對象之前不會為會話數據分配儲存空間。因此,在訪問會話對象之前,會為每個頁面請求生成一個新的會話 ID。如果您的應用程序需要整個會話的靜態會話 ID,您可以在應用程序的 Global.asax 文件中實現 Session_Start 方法並將數據儲存在 Session 對像中以修復會話 ID,或者您可以在您的另一部分中使用程式碼應用程序將數據顯式儲存在 Session 對像中。

如果您的應用程序使用無 cookie 會話狀態,則會話 ID 會在第一個頁面查看時生成,並在整個會話期間保持不變。

關鍵是我不能使用無 cookie 會話狀態,因為我需要 cookie。

我能做些什麼來避免這個錯誤?或者我能做些什麼來避免 Session.SessionID 在每個請求上都發生變化?

您可能正在儲存您的會話 InProcess。嘗試將其更改為會話狀態伺服器。您可以在此處找到更多詳細資訊。

我正在使用報表查看器 11.0.0;在 system.web 部分的 web 配置中,放置下一個配置:

<sessionState timeout ="120" mode="InProc" cookieless="false" />

當您在 reportviewer 對像中生成報告(下面的 C# 程式碼)時,將 KeepSessionAlive 屬性更改為 false 並將 AsynkRendering 屬性更改為 false,僅此而已

       this.rvReporte.KeepSessionAlive = false;
       this.rvReporte.AsyncRendering = false;

(rvReporte) 是位於我的 asp.net 表單上的 ReportViewer 控制項。此解決方案對我有用,我希望對其他人有用。

問候

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