Ich habe ein Problem mit einem "Remember me" -Stil-Kontrollkästchen in einem MVC6-Projekt. Ich hatte eine verwandte Frage hier , die das Problem für das Debugging löste auf meinem localhost, aber nachdem ich das Projekt in unserer Entwicklungsumgebung implementiert habe, zwingt es mich immer noch, mich nach 20 Minuten erneut anzumelden.
Die Zeitspanne von 20 Minuten ließ mich glauben, dass etwas mit IIS falsch konfiguriert war. Ich setze meinen App-Pool (konfiguriert als "no managed code") im Leerlauf, um nach 1 Minute in den Leerlauf zu gehen. Sicher genug, nach 1 Minute muss ich mich erneut einloggen.
Dies führt zu der Annahme, dass mein persistierender Authentifizierungscookie nach dem Recyceln eines App-Pools nicht mehr als gültig akzeptiert wird (obwohl mein Cookie nicht auf 10 Tage und der SecurityStampValidationInterval
auf 10 Tage und 1 gesetzt ist) Minute.
Ich habe in früheren Versionen von .NET etwas Ähnliches gesehen, das mit dem Maschinenschlüssel von web.config zusammenhängt, aber MVC6 hat in der web.config keinen Abschnitt system.web
, um einen Maschinenschlüssel zu setzen.
Mein .NET5-Projekt DNX zielt auf das vollständige .NET-Framework und nicht auf .NET Core ab.
Wie haben Sie den Datenschutz konfiguriert? Mit IIS und DNX wissen wir nicht, wo Schlüssel dauerhaft gespeichert werden sollen, es sei denn, Sie laden ein Profil, das nicht der Standard ist. Sobald Ihre App beendet ist, werden alle Schlüssel zum Signieren der Authentifizierungs-Cookies gelöscht. Dies geschieht nicht in IIS Express, da IIS Express Profile lädt.
Sie haben hier ein paar Möglichkeiten. Sie können entweder ein Bereitstellungsskript auf dem IIS-Server ausführen, um einige Registrierungseinträge ASP zu erstellen. NET kann verwenden, oder Sie können den Datenschutz für die Verwendung des Dateisystems konfigurieren was würden Sie tun, wenn Sie mehrere Hosts ausführen möchten.
BEARBEITEN
Siehe @ blowdarts Antwort für eine bessere Lösung.
Für jeden, der auf dasselbe Problem stößt, habe ich das "Problem", das ich implementiert habe, darin gesetzt, den Leerlauftimer in IIS auf 0 zu setzen, was bedeutet, dass es nie zu einem Timeout kommt.
Ich bin immer noch auf der Suche nach einer richtigen Lösung, da einige Hostumgebungen möglicherweise nicht zulassen, dass der Leerlauftimer auf 0 gesetzt wird (normalerweise Shared Hosting usw.).
Tags und Links iis-7.5 c# asp.net-core asp.net-core-mvc