ASP .NET, Session Timeout Timer restarten
-
Soweit ich sehen kann, wird der Timer für das ASP .NET Session-Timeout zu Beginn der "Seiten-Lade-Funktion" gestartet.
Kann man diesen Timer "manuell" resetten, für Seiten die recht lange zu laden brauchen?
(Und wenn ja, wie? )
-
Hmpf.
Meine Frage hat sich grad irgendwo erübrigt, da ASP .NET die Session_End schon aufruft bevor die "aktuelle" Seite überhaupt fertig aufgebaut ist. So ein Schmarrn...
-
Session-Timeout setzen:
Session.Timeout = x;
oder in der web.config:
<sessionState timeout="x" />
Falls du keinen eigenen Webserver betreibst, kann es allerdings sein, dass dein Hoster nicht zulässt, dass der Timout verändert wird.
Normalerweise steht der Session Timeout auf 20 Minuten. Das sollte locker für die Darstellung einer Seite reichen bzw. so lange wartet kein Mensch auf eine Seite.
Evtl. meinst du aber was ganz anderes, nämlich den "ExecutionTimeout", der standardmäßig nach 110 Sekunden zuschlägt.
den kannst du ebenfalls in der web.config ändern:
<httpRuntime executionTimeout = "x" />
-
Ne, ich meine schon das Session-Timeout.
Wir hatten das Session-Timeout zwecks Sicherheit auf 1 Minute runtergesetzt (die Webseite pullt über Java-Script alle 30 Sekunden ne Dummy-Seite um die Session am Leben zu halten).
Und was da passiert ist, ist, dass der Request für eine Seite schon länger gedauert hat als das Session Timeout. Also länger als 60 Sekunden, z.B. 80 oder 90.
Und jetzt wollte ich am Ende dieser 80-90 Sekunden einfach den Timer für das Session-Timeout resetten. Bloss dass ich dabei übersehen hatte, dass der Timer schon VOR diesem Zeitpunkt abläuft, und ASP .NET auch schon VOR diesem Zeitpunkt den Event triggert. Obwohl zu diesem Zeitpunkt noch Requests "laufen".
Egal. Wir haben das Timeout jetzt erstmal auf 5 Minuten raufgesetzt, was momentan ausreichend ist.
-
Ahhh, ok.
In so einem Fall fällt mir nur noch ein, vor die eigentliche Seite eine Dummy-Seite zu schalten, in dieser dann im Code-Behind den Session-Timeout zu erhöhen und dann von dieser auf die eigentliche Seite zu redirecten (dort dann den Timeout wieder auf 1 Minute stellen). Könnte funktionieren.
Oder aber die längere Berechnung in einem Background-Thread abzuwickeln und das Ergebnis dann per AJAX abzuholen (AJAX-Update der Seite per Javascript alle 10 Sekunden oder so). Beim Update dann prüfen, ob Berechnung fertig, wenn ja, dann Ergebnis anzeigen, ansonsten weiterhin "Bitte warten" anzeigen.