Ich arbeite an der Einrichtung/Korrektur meiner Sitzung Timeout-Code und haben zahlreiche Artikel wie this one und this SO post für Ideen, wie dies am besten zu tun. Die Lösung zum Ermitteln eines Sitzungstimeouts, das immer wieder angezeigt wird, besteht darin, zuerst die Session.IsNewSession-Eigenschaft auf "true" zu überprüfen. Wenn ja, prüfen Sie, ob bereits ein Sitzungscookie vorhanden ist. Ich denke, die Logik hier ist, dass der Benutzer seine letzte Sitzung beendet hat, die abgelaufen ist, eine neue Sitzung gestartet hat, aber der alte Cookie wurde noch nicht entfernt. Der Code für diese Kontrollen sieht wie folgt aus:ASP.NET: Session.IsNewSession false nach Formular Timeout, sollte aber wahr sein?
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
Response.Redirect("sessionTimeout.htm"); // or whatever code to handle timeout
}
}
}
Jetzt bin ich zur Zeit mit einem Session-Timeout-Wert von 120 Minuten zu arbeiten, und ein Forms Timeout-Wert von 60 min. Diese beiden Linien aus meiner Datei web.config, resepectively sind hier:
<sessionState mode="InProc" cookieless="UseDeviceProfile" timeout="120" />
<authentication mode="Forms">
<forms loginUrl="~/Home/Customer" timeout="60" name=".ASPXAUTH" requireSSL="false" slidingExpiration="true" defaultUrl="~/Home/Index" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
So nach 60 Minuten (Ich stelle es auf 1-Test), habe ich eine Anfrage an den Server, und ich automatisch umgeleitet nach/Home/Customer, nehme ich an aufgrund des 'loginURL' Wertes in meiner web.config Zeile.
Das Problem ist, dass die Sitzung nicht beendet wird, und alle meine Sitzungszeitüberschreitungsprüfungen sind in der Home/Customer-Aktion (ich verwende MVC). Also werde ich nach Home/Customer umgeleitet, und ich laufe die obigen Checks durch, aber wenn ich zu Session.IsNewSession komme, ist es falsch, weil die Session noch am Leben ist (ich nehme an, weil ich noch innerhalb der 120 Minuten bin, die ich habe einstellen).
Also, endlich, meine Frage. Funktioniert dieses ganze Session-Timeout-Checking-Schema nur, wenn die tatsächliche Session ausläuft? Oder kann ich es für Forms Timeouts auch arbeiten lassen? Vielleicht besteht die Lösung darin, den Wert für das Zeitlimit für die Sitzung auf den Zeitlimitwert für Formulare festzulegen?
Derzeit diese Kontrollen in der Controller-Aktion, die ausgeführt wird, wenn der Benutzer die Seite trifft, die sie anmelden (Home/Kunden) ermöglicht es, das ich das sein hielte Login-Seite, es sei denn, Sie sprechen über etwas anderes. Können Sie etwas über die Option global.asax erfahren? –
Nein, du hast Recht. Es bedeutet nur, dass Sie IsNewSession nicht immer wahr werden lassen; nur wenn der Benutzer länger als 120 Minuten im Leerlauf war. –
Könnten Sie bitte eine Code-/Einstellungslösung bereitstellen? –