Asp.net
對 ASP.NET 站點的更改是否會終止活動會話?
我擔心我的使用者會話被掃除的可能性。我正在使用預設的 ASP.NET 會話對象和會話 cookie。我知道會話可能會超時,並且我已將會話的超時值設置為幾個小時以避免意外超時。
但至少還有另外兩個我擔心的情況。
- 我了解 ASP.NET 會定期回收執行站點/Web 應用程序的應用程序域(不確定我是否在這裡的所有術語都正確)。會話是否存在於這些回收事件中?
- 至少在我的開發伺服器上,我對站點所做的某些更改(例如,添加新頁面)似乎會在重新編譯站點(或其中的一部分)時導致活動會話失去。似乎並非每次更改都會發生這種情況,但許多更改都會發生。我特別擔心這對我的網站執行時可能發生的更改意味著什麼。我想知道我可以在不導致活動會話被終止的情況下更新的規則。
感謝您的任何指示。
這取決於您的會話狀態模式。這是您可以在Microsoft 支持上找到的內容的副本:
ASP.NET 支持三種會話狀態模式:
- InProc:In-Proc 模式將值儲存在 ASP.NET 工作程序的記憶體中。因此,此模式提供了對這些值的最快訪問。但是,當 ASP.NET 工作程序回收時,狀態數據會失去。
- StateServer:或者,StateServer 模式使用獨立的 Microsoft Windows 服務來儲存會話變數。由於此服務獨立於 Microsoft Internet Information Server (IIS),因此它可以在單獨的伺服器上執行。您可以將此模式用於負載平衡解決方案,因為多個 Web 伺服器可以共享會話變數。儘管重新啟動 IIS 不會失去會話變數,但跨程序邊界時性能會受到影響。
- SqlServer:如果您非常關心會話資訊的持久性,您可以使用 SqlServer 模式來利用 Microsoft SQL Server 來確保最高級別的可靠性。SqlServer 模式類似於程序外模式,不同之處在於會話數據保存在 SQL Server 中。SqlServer 模式還使您能夠利用位於 IIS 程序之外並且可以位於本地電腦或遠端伺服器上的狀態儲存。
如果您使用 StateServer 或數據庫,當 IIS 檢測到網站更改時,您的會話數據不會失去。