2013-04-08 13 views
5

Ich schlage vor, ein einfaches Sitzungsobjekt in einem MVC3 zu verwenden, um Statusdaten wie RecordIds beizubehalten, anstatt sie durch alle Seiten des Client-Seiten zu übergeben, die eine Hektik sein werden. Es scheint viel einfacher zu sein, das Sitzungsobjekt nur einmal zu füllen, bis es nicht mehr benutzt wird.Verwenden von Sitzungsobjekte in MVC, ist es wirklich schlecht?

So ist diese akzeptable Praxis oder ein Betrüger?

Vielen Dank.

+1

Ich habe dafür gestimmt, um dies zu schließen, da es Debatte über die Vor- und Nachteile provozieren wird. Es ist nicht gut für QA geeignet. Das heißt, es gibt einige ähnliche Fragen zu SO: http://StackOverflow.com/Questions/10181629/Why-Session-is-Adisaster-in-Asp-Netz-MVC-Application und http://StackOverflow.com/questions/6165241/asp-net-mvc-session – Jamiec

Antwort

7

Es ist nichts falsch daran, Session-Objekte zu verwenden. Im Allgemeinen meiden Leute sie, um die Last auf dem Server zu verringern; aber wenn Sie vorsichtig sind und nicht versuchen, viele Daten dort zu setzen und nicht zu viele (wie viele ist zu viele hängt von Ihrem Server), dann ist es eine akzeptable Praxis.

Für einige Informationen über die möglichen Nachteile von Sitzungen mit Check-in Entwickler-Leben Wie alles the answer zu Still ok to use Session variables in ASP.NET mvc, or is there a better alternative for some things (like a cart)

+0

Danke, hilfreich. Ich dachte immer, es wäre etwas wie eine "GoTo" -Anweisung in der Programmierung. Scheint nicht im richtigen Kontext. – SamJolly

+0

Schönes Beispiel mit dem Wagen. Ich gebe tatsächlich Daten um einen Workflow herum, aber jeder Workflow-Schritt kann auf einen anderen Controller zugreifen, um seine Arbeit zu erledigen. – SamJolly

6

aus, Sitzung über einen Trade-off ist, und ein IMHO ist es in der Regel ein schlechter. Der Sitzungsstatus verursacht nicht nur eine Last auf dem Server, die dazu neigt zu wachsen, und schafft eine Skalierbarkeitsbarriere (beide Probleme können - teilweise - durch das Speichern von Sitzungsvariablen mit dem Statusserver oder dem SQL-Server gelöst werden) Jeder ist sich dessen bewusst: Es hält eine Schreib-Lese-Sperre für die Sitzung aufrecht. (http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx)

Dies bedeutet, dass standardmäßig keine zwei gleichzeitige Anforderungen von demselben Benutzer gestellt werden können. Dieses Verhalten ist asp.net verwandt (nicht nur asp.net MVC), aber da asp.net MVC wirklich ermutigt Sie auf der Ajax-Straße gehen, werden Sie dieses Problem viel öfter sehen).

Sie können diese Probleme umgehen, indem Sie intelligent verwenden, aber aus meiner Erfahrung, dass Entwicklungsaufwand erzeugt, da dieses Attribut nur für Klassenbereich und nicht für bestimmte Aktionsmethoden deklariert werden kann, die Sie logische Einheiten zu brechen würde normalerweise zusammen liegen.

Zusammenfassend ist Ihr Honor, ASP.net Session State Standardverhalten problematisch. Vermeiden Sie es wenn möglich.

+1

Ihre Beweise werden gnädig empfangen! Das Gericht wird sich jetzt vertagen, um seine Ergebnisse zu schließen :) – SamJolly

Verwandte Themen