2010-05-03 6 views
5

Ich habe Probleme mit einer asp.net C# -Site, wobei ich ein Session-State-Objekt auf true setzen und dann auf eine andere Seite umleiten, die den Wert des Sitzungsstatusobjekts überprüfen muss und es ist Null.Sessionstatus nicht zwischen den Seiten gespeichert

Manchmal ist es richtig eingestellt und andere Zeiten ist einfach null.

Wenn ich auf meinem lokalen Rechner debugge, funktioniert es jedes Mal perfekt. Nur wenn ich auf meinen Webserver hochlade, tritt dieses temperamentvolle Verhalten auf.

Da es um die Sicherheit der Website geht, ist es natürlich wichtig, dass die Sitzungsdaten jedes Mal gültig und genau sind.

Sind Sitzungsstatusdaten nicht zuverlässig?

AFAIK seine inproc gesetzt, cookieless, 30 min Timeout, Vanille-Installation von IIS.

Hat jemand irgendwelche Vorschläge? Vielleicht muss ich zwischen dem Speichern der Sitzungsdaten und dem Lesen thread.sleep?

NB: die Zeit zwischen dem Schreib- und dem Lese ist etwa 70 ms .. genügend Zeit für die Daten ..... Wenn der Sitzungsstatus verloren

Antwort

1

in dem RAM geschrieben werden, das ist in der Regel, weil Ihr Prozess entweder recycelt oder schlägt fehl. Ich würde mich niemals auf den Sitzungsstatus zwischen den Seiten "verlassen". Stattdessen möchten Sie möglicherweise versuchen, Daten auf andere Weise zwischen Seiten zu speichern. Vielleicht die Informationen über Formularvariablen weitergeben oder die Daten in der Datenbank speichern.

ASP.NET Profiles sind eine bevorzugte Möglichkeit, diese Art von Informationen zu speichern. Vielleicht möchten Sie ASP.NET State Management Recommendations lesen.

+0

tatsächlich, OP zeigt an, dass es sich um ein Sicherheitsproblem handelt, daher wahrscheinlich eine Authentifizierung. In diesem Fall sind Profile ohne ein Formularticket nicht autorisierbar. –

2

Nein. Es klingt, als ob Sie den Sitzungsstatus missbrauchen. Sie können sich nicht darauf verlassen, dass die Benutzersitzung dort ist. Ihr ASP.NET-Arbeitsprozess könnte die Anwendung recyceln, neu starten und alle Sitzungen beenden, oder eine Datei könnte sich auf Ihrer Website ändern, wodurch Ihre Anwendung neu gestartet und alle Sitzungen geleert werden, Cookies auf dem Client gelöscht werden, Timeouts auftreten usw.

Also müssen Sie für alle diese Szenarien mit Sitzungsstatus bereitstellen. Versuchen Sie, den Sitzungsstatus für solche Dinge zu vermeiden. Wenn Sie den Zugriff innerhalb Ihres Sitzungsstatus festlegen und Sie nicht genau wissen, wie er funktioniert, könnten Sie Ihre Website für viele Sicherheitsrisiken öffnen.

2

Alles deutet auf eine Webfarm hin. Wenn in der Produktionsumgebung unterschiedliche Webserver in der Anwendung vorhanden sind, experimentieren Sie mit diesem Verhalten.

Ich finde keine andere Erklärung für diese "funktioniert auf meiner Maschine!"

+0

Ich stimme zu, der Grund, warum es mit Unterbrechungen arbeitet, ist, dass Sie manchmal den gleichen Arbeitsprozess erhalten und andere nicht. Versuchen Sie, einen anderen Sitzungsstatusmodus als InProc zu verwenden. –

2

Ich habe keine Antwort für Ihr spezielles Problem, aber Claudio meine auf etwas.

Was ich zu sagen habe ist, dass die Verwendung der Sitzung für die Sicherheit ist so 90er. Buchstäblich.

FormsAuthentication wurde entwickelt, um diese Technik zu ersetzen und macht eine ziemlich gute Arbeit.

Sie sollten sich nur auf Sitzungen für triviale Belange verlassen, die leicht wiederherstellbar sind.

Sicherheit gehört nicht dazu.

Verwandte Themen