Frage

Es gibt verschiedene Möglichkeiten, den Benutzerstatus bei der Webentwicklung aufrechtzuerhalten.

Das sind die, die mir gerade einfallen:

  1. Abfragezeichenfolge

  2. Kekse

  3. Formularmethoden (Get und Post)

  4. Viewstate (nur ASP.NET, denke ich)

  5. Sitzung (InProc-Webserver)

  6. Sitzung (dedizierter Webserver)

  7. Sitzung (Datenbank)

  8. Lokale Persistenz (Google Gears) (danke Steve Moyer) usw.

Ich weiß, dass jede Methode ihre eigenen Vor- und Nachteile hat, zum Beispiel, dass Cookies nicht sicher sind und dass QueryString eine Längenbeschränkung hat und einfach hässlich anzusehen ist!;)

Beim Entwerfen einer Webanwendung bin ich jedoch immer verwirrt, welche Methoden ich für welche Anwendung verwenden oder welche Methoden ich vermeiden sollte.

Ich würde gerne wissen, welche Methode(n) Sie im Allgemeinen verwenden und empfehlen oder, was noch interessanter ist, welche dieser Methoden Sie in bestimmten Szenarien gerne vermeiden würden und warum?

War es hilfreich?

Lösung

Dies ist zwar eine sehr komplizierte Frage zu beantworten, ich habe ein paar schnelle Biss Dinge, die ich denke, wenn man bedenkt Zustand zu implementieren.

  • Abfrage-String-Zustand ist nur nützlich für die grundlegendsten Aufgaben - beispielsweise innerhalb eines Assistenten, um die Position eines Benutzers gehalten wird, vielleicht, oder einen Pfad bietet den Benutzer umgeleitet werden, nachdem sie eine bestimmte Aufgabe abzuschließen (zB Anmeldung ). Ansonsten ist Query-String-Zustand schrecklich unsicher, schwierig zu implementieren und um es gerecht zu werden, braucht es bis zu einem gewissen serverseitigen Zustandsmaschine gebunden werden durch einen Schlüssel enthält, die für diesen Client den Client auf dem Server des beibehalten Zustand zu binden.
  • Cookie Zustand ist mehr oder weniger das gleiche - es ist einfach schicker als Query-String-Zustand. Aber es ist immer noch völlig auf der Client-Seite gehalten, es sei denn die Daten im Cookie ein Schlüssel ist, um den Client zu einer Server-Side-Zustandsmaschine zu binden.
  • Form Verfahrenszustand wieder ähnlich ist - es ist für Ausblenden von Feldern nützlich ist, die eine bestimmte Form zu einem gewissen Bit Daten am hinteren Ende binden (zB „dieser Benutzerdatensatz bearbeitet # 512, so wird das Formular ein verstecktes Eingabe enthält mit dem Wert 512" ). Es ist nicht sinnvoll, für viel mehr, und wieder, ist nur eine weitere Implementierung der gleichen Idee hinter Query-String-und Cookie-Zustand.
  • Sitzungsstatus (eine der Möglichkeiten, wie Sie beschreiben) sind alle groß, da sie unendlich erweiterbar sind und kann alles gewählten Programmiersprache umgehen kann behandeln. Der erste Nachteil ist, dass es einen Schlüssel in der Client-Hand sein muss, dass der Client seines Zustand auf dem Server gespeichert werden, zu binden; das ist, wo die meisten Web-Frameworks entweder einen Cookie-basierte oder Query-String-basierten Schlüssel zurück an den Client zur Verfügung stellen. (Fast jedes modern Cookies verwendet, fällt aber auf Abfrage-Strings zurück, wenn Cookies nicht aktiviert.) Der zweite Nachteil ist, dass Sie einige setzen müssen allerdings darüber, wie Sie Ihren Zustand sind die Speicherung ... Sie werden es in ein setzen Datenbank? Gibt es in Ihrem Web-Framework es für Sie ganz handhaben? Auch hier nimmt die meist moderne Web-Frameworks, die Arbeit dieses aus, und für mich, meine eigene Zustandsmaschine über die Umsetzung zu gehen, ich brauche einen sehr guten Grund ... sonst, ich bin wahrscheinlich Sicherheit zu schaffen Löcher und Funktionalität Bruch, die in einem der reifen Rahmenbedingungen im Laufe der Zeit gehasht aus.
  • ist schon

Also ich denke, ich kann nicht wirklich nicht sitzungsbasierte Staat für etwas anderes als den banalsten Grund verwenden imagine will.

Andere Tipps

Sicherheit ist auch ein Thema; Werte in dem Query-String oder Formularfeldern können trivialerweise durch den Benutzer geändert werden. Die Benutzerauthentifizierung sollte entweder in einem verschlüsselten oder manipulationssicheren Cookie oder in der serverseitigen Sitzung gespeichert werden. Die Verfolgung der Werte in einer Form als Benutzer weitergegeben einen Prozess abgeschlossen ist, wie eine Website Anmeldung, na ja, das kann wahrscheinlich in versteckten Formularfeldern gehalten werden.

Die nette (und manchmal gefährlich) Sache ist allerdings, über den Query-String, dass der Staat von jedem werden kann, die auf einem Link klickt abgeholt. Wie oben erwähnt, ist dies gefährlich, wenn es der Benutzer eine Berechtigung gibt, sollten sie nicht haben. Es ist schön, aber für Ihre Freunde etwas zeigen Sie auf der Website gefunden.

Mit der zunehmenden Nutzung von Web 2.0, ich glaube, es gibt zwei wichtige Methoden aus der Liste fehlen:

8 AJAX-Anwendungen -., Da die Seite neu zu laden nicht und es gibt keine Seite zur Navigation, Zustand ist kein Problem (aber Benutzerdaten persistierenden muß die asynchronen XML-Anrufe verwenden)

9 Lokale Persistenz -. Browser-basierte Anwendungen, um ihre Benutzerdaten und Zustand auf die lokale Festplatte bestehen können Bibliotheken wie Google Gears mit

Wie für die man am besten ist, ich glaube, sie alle haben ihren Platz, aber die Query-String-Methode ist für Suchmaschinen problematisch.

Persönlich, da fast alle meine Web-Entwicklung in PHP ist, verwende ich die PHP-Session-Handler.

Sessions sind die flexibelste, in meiner Erfahrung: sie sind normalerweise schneller als db zugreift, und die Cookies erzeugen sie sterben, wenn der Browser (Standard) schließt

.

Vermeiden Sie InProc wenn Sie Ihre Website auf einem billigen-n-fröhlichen Gastgebern wie webhost4life Gastgeber. Ich habe auf die harte Tour gelernt, dass, weil ihre Systeme über abonniert sind, sie die Anwendungen recyceln sehr häufig, die bewirkt, dass die Sitzung verloren gehen. Sehr nervig.

Ihr Vorschlag ist State zu verwenden, was in Ordnung ist, außer Sie serialise haben / deserialise die Sitzung eash Post zurück. Ich liebe Objekte und mein Web-App ist voll von ihnen. Ich mache mir Sorgen über die Leistung, wenn sie State wechseln. Ich brauche nur Refactoring, um das Zeug habe ich wirklich in der Sitzung müssen.

Ich wünsche, ich würde wissen, dass, bevor ich begann ...

Cheers, Rob.

Achten Sie darauf, welchen Status Sie clientseitig speichern (Abfragezeichenfolgen, Formularfelder, Cookies).Alles, was mit der Sicherheit zu tun hat, sollte nicht clientseitig gespeichert werden, außer vielleicht einer Sitzungskennung, wenn diese einigermaßen verdeckt und schwer zu erraten ist.Es gibt zu viele Websites, die Einstellungen wie „authenticated=true“ haben und diese in einem Cookie, einer Abfragezeichenfolge oder einem versteckten Formularfeld speichern.Für einen Benutzer ist es trivial, so etwas zu umgehen.Denken Sie daran, dass JEDE Eingabe eines Clients manipuliert worden sein könnte und nicht als vertrauenswürdig eingestuft werden sollte.

Signed Plätzchen zu einer Art Datenbankspeicher verbunden, wenn Sie greifen müssen Daten. Es gibt keinen Grund, Daten auf der Clientseite zu speichern, wenn Sie angeschlossen haben ein Back-End; Sie suchen nur Ärger, wenn dies eine öffentlich zugängliche Website.

Es ist nicht einige sehr eine Frage, was und zu verwenden, was zu vermeiden, aber wenn zu verwenden, welche. Jeder hat einen besonderen Umstand, wenn es das Beste ist, und ein anderer Umstand, wenn es das Schlimmste.

Der entscheidende Faktor ist in der Regel Lebensdauer der Daten. Sitzungszustand lebt länger als Formularfelder und so weiter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top