ASp.net-Statusserver, der sich mit IRequiresSessionState vs. IReadOnlySessionState befasst?
-
10-12-2019 - |
Frage
MEIN Freund fragte hier a Frage
Und derjenige, der ihm geantwortet hat, hat etwas Interessantes geschrieben!(ohne Beleg, Quelle).
Es macht einen größeren Unterschied, wenn Sie den Speicher der Sitzung des Sitzungsstatus außerhalb des Verfahrens verwenden.In diesem Fall speichert das System ohne die Schnittstelle die Sitzungsdaten in der Remote -Datenbank, auch wenn es sich nicht geändert hat (das System verfolgt nicht, ob die Sitzungsdaten während der Anforderung geändert wurden).Wenn Sie die Schnittstelle von ireadonlySessionState verwenden, wird die Schreibbackphase übersprungen.
Wo steht, dass IRequiresSessionState die Sitzung zurückschreibt (auch wenn sich nichts geändert hat)?
Etwaige Erklärungen werden gerne entgegengenommen.
Lösung
Ich kann keine formelle Dokumentation zu diesem Zweck finden, aber starte dotPeek (oder einen anderen Disassembler) und schaue dich um System.Web
enthüllt nacheinander Folgendes:
- Wann
HttpContext.Handler
Istset
, wenn der Handler implementiertIRequiresSessionState
,HttpContext._requiresSessionStateFromHandler
eingestellt isttrue
; - Dieses letztere private Mitglied informiert die
get
ter fürHttpContext.RequiresSessionState
; SessionStateModule
(was meiner Vermutung nach immer in der Modulpipeline ist), in seinemEndRequest
Hundeführer, KontrollenHttpContext.RequiresSessionState
, und wenn jatrue
, kommuniziert mit dem Sitzungsstatusanbieter, um den Status zu speichern.