443 Stimmen

Was sind Sitzungen? Wie funktionieren sie?

Ich fange gerade an, mich in die Entwicklung von Webanwendungen mit Python einzuarbeiten. Ich stoße dabei auf die Begriffe "Cookies" und "Sessions". Ich verstehe Cookies so, dass sie einige Informationen in einem Schlüssel-Wert-Paar im Browser speichern. Aber ich bin etwas verwirrt in Bezug auf Sessions. Auch in einer Session speichern wir Daten in einem Cookie im Browser des Benutzers.

Zum Beispiel - ich melde mich an mit username='rasmus' y password='default' . In einem solchen Fall werden die Daten an den Server gesendet, der sie überprüfen und mich anmelden soll, wenn ich authentifiziert bin. Während des gesamten Vorgangs erzeugt der Server jedoch auch eine Sitzungs-ID, die in einem Cookie in meinem Browser gespeichert wird. Nun speichert der Server diese Sitzungsnummer auch in seinem Dateisystem oder Datenspeicher.

Aber woher soll es auf der Grundlage der Sitzungs-ID wissen, wie mein Benutzername lautet, wenn ich die Website später durchlaufe? Werden die Daten auf dem Server als Diktat gespeichert, wobei der Schlüssel eine Sitzungs-ID und Details wie username , email usw. die Werte sein?

Ich bin hier ziemlich verwirrt. Brauche Hilfe.

531voto

Luke404 Punkte 9614

Da HTTP zustandslos ist, benötigen Sie eine Möglichkeit, Benutzerdaten zwischen HTTP-Anfragen zu speichern, um eine Anfrage mit einer anderen Anfrage zu verknüpfen.

Cookies oder URL-Parameter (z.B. wie http://example.com/myPage?asd=lol&boo=no ) sind beides geeignete Wege, um Daten zwischen 2 oder mehr Aufträgen zu transportieren. Sie sind jedoch nicht geeignet, wenn die Daten auf der Client-Seite nicht lesbar/editierbar sein sollen.

Die Lösung besteht darin, diese Daten serverseitig zu speichern, ihnen eine "ID" zu geben und dem Client nur diese ID mitzuteilen (und bei jeder HTTP-Anfrage zurückzugeben). Das war's, Sitzungen sind implementiert. Oder Sie können den Client als bequemen Remote-Speicher verwenden, aber Sie würden die Daten verschlüsseln und das Geheimnis serverseitig bewahren.

Natürlich gibt es noch andere Aspekte, die zu berücksichtigen sind, z. B. dass man nicht möchte, dass Leute die Sitzungen anderer entführen, dass die Sitzungen nicht ewig dauern, sondern ablaufen, usw.

In Ihrem konkreten Beispiel wird die Benutzerkennung (z. B. der Benutzername oder eine andere eindeutige Kennung in Ihrer Benutzerdatenbank) nach erfolgreicher Identifizierung serverseitig in den Sitzungsdaten gespeichert. Bei jeder HTTP-Anfrage, die Sie vom Client erhalten, verweist die (vom Client angegebene) Sitzungskennung auf die korrekten (vom Server gespeicherten) Sitzungsdaten, die die authentifizierte Benutzerkennung enthalten - auf diese Weise weiß Ihr Code, mit welchem Benutzer er spricht.

215voto

BenKoshy Punkte 29349

Erläuterung über Bilder:

Sessions explained via Picture

Einfache Erläuterung durch Analogie

Stellen Sie sich vor, Sie sind in einer Bank und versuchen, Geld von Ihrem Konto abzuheben. Aber es ist dunkel, in der Bank ist es stockdunkel: Es gibt kein Licht und Sie können die Hand vor Ihrem Gesicht nicht sehen. Sie sind von 20 weiteren Personen umgeben. Sie sehen alle gleich aus. Und alle haben die gleiche Stimme. Und jeder ist ein potenzieller Bösewicht. Mit anderen Worten: Die HTTP ist staatenlos.

Diese Bank ist eine seltsame Art von Bank - um es kurz zu machen, hier ist die Funktionsweise:

  1. Sie warten in der Schlange (oder online) und sprechen mit dem Schalterbeamten: Sie stellen einen Antrag auf Abhebung von Geld, und dann
  2. Sie müssen kurz auf dem Sofa warten, und 20 Minuten später
  3. Sie müssen Ihr Geld tatsächlich beim Kassierer abholen.

Aber wie kann der Kassierer Sie von allen anderen unterscheiden?

Der Kassierer kann Sie nicht sehen oder erkennen, denn die Lichter sind aus. Was ist, wenn der Kassierer Ihre 10.000 Dollar an eine andere Person auszahlt - an die falsche Person?! Es ist absolut wichtig, dass der Kassierer Sie als denjenigen erkennen kann, der die Abhebung vorgenommen hat, damit Sie das Geld (oder die Mittel) erhalten, um die Sie gebeten haben.

Lösung:

Wenn Sie zum ersten Mal vor dem Kassierer erscheinen, erzählt er oder sie Ihnen etwas Geheimes:

"Wenn Sie mit mir sprechen", sagt der Kassierer, "sollten Sie sich zuerst als GNASHEU329 zu erkennen geben, damit ich weiß, dass Sie es sind".

Niemand sonst kennt den geheimen Passcode.

Beispiel, wie ich Bargeld abgehoben habe:

Also beschließe ich, mich 20 Minuten lang zu entspannen und dann später zum Schalter zu gehen und zu sagen: "Ich möchte meine Abhebung abholen".

Die Kassiererin fragt mich: "Wer sind Sie?!"

"Ich bin es, Mr. George Banks!"

"Beweisen Sie es!"

Und dann sage ich ihnen meinen Passcode: GNASHEU329

"Sicherlich, Mr. Banks!"

So funktioniert im Grunde eine Sitzung. Sie ermöglicht es einem, in einem Meer von Millionen von Menschen eindeutig identifiziert zu werden. Sie müssen sich jedes Mal identifizieren, wenn Sie mit dem Schalterbeamten zu tun haben.

Wenn Sie Fragen haben oder etwas unklar ist - bitte schreiben Sie einen Kommentar und ich werde versuchen, es für Sie zu klären. Das Folgende ist streng genommen nicht ganz korrekt in seiner Terminologie, aber ich hoffe, es ist hilfreich für das Verständnis der Konzepte.

55voto

Tim Rourke Punkte 801

Der Begriff "Sitzung" bezeichnet die Zeit, die ein Benutzer auf einer Website verbringt. Er bezeichnet die Zeit zwischen dem ersten Aufrufen einer Seite der Website und dem Zeitpunkt, an dem der Nutzer die Nutzung der Website beendet. In der Praxis ist es unmöglich zu wissen, wann der Benutzer mit der Website fertig ist. Bei den meisten Servern gibt es eine Zeitüberschreitung, die eine Sitzung automatisch beendet, wenn nicht eine weitere Seite von demselben Benutzer angefordert wird.

Wenn sich ein Benutzer zum ersten Mal anmeldet, wird eine Art Sitzungs-ID erstellt (wie dies geschieht, hängt von der Webserver-Software und der Art der Authentifizierung/Anmeldung ab, die Sie auf der Website verwenden). Wie bei den Cookies wird diese normalerweise nicht mehr in der URL gesendet, da dies ein Sicherheitsproblem darstellt. Stattdessen wird es zusammen mit einer Reihe anderer Daten gespeichert, die zusammen als Sitzung bezeichnet werden. Sitzungsvariablen sind wie Cookies - sie sind Name-Wert-Paare, die zusammen mit einer Anfrage für eine Seite gesendet und mit der Seite vom Server zurückgegeben werden - aber ihre Namen sind in einem Webstandard definiert.

Einige Sitzungsvariablen werden als HTTP-Kopfzeilen . Sie werden hinter den Kulissen jedes Seitenaufrufs hin- und hergereicht, damit sie nicht im Browser angezeigt werden und jedem etwas mitteilen, das möglicherweise privat ist. Dazu gehören der USER_AGENT oder der Typ des Browsers, der die Seite anfordert, der REFERRER oder die Seite, die auf die angeforderte Seite verlinkt, usw. Manche Webserver-Software fügt eigene Header hinzu oder überträgt zusätzliche, für die Serversoftware spezifische Sitzungsdaten. Die Standard-Header sind jedoch ziemlich gut dokumentiert.

Ich hoffe, das hilft.

21voto

Artem Barger Punkte 39755

HTTP ist ein zustandsloses Verbindungsprotokoll, d. h. der Server kann nicht zwischen verschiedenen Verbindungen unterschiedlicher Benutzer unterscheiden.

Wenn ein Client zum ersten Mal eine Verbindung zu einem Server herstellt, erzeugt der Server eine neue Sitzungsnummer, die später als Cookie-Wert an den Client gesendet wird. Und von nun an identifiziert diese Sitzungsnummer die Verbindung des Clients, da er bei jeder HTTP-Anfrage die entsprechende Sitzungsnummer in den Cookies sieht.

Für jede Sitzungsnummer hält der Server eine Datenstruktur vor, die es ihm ermöglicht, benutzerspezifische Daten zu speichern; diese Datenstruktur kann abstrakt als Sitzung bezeichnet werden.

14voto

Luv33preet Punkte 1925

Stellen Sie sich HTTP als eine Person(A) vor, die unter KURZZEITGEDÄCHTNISVERLUST leidet und jede Person vergisst, sobald sie aus dem Blickfeld verschwindet.

Um sich an verschiedene Personen zu erinnern, macht A ein Foto von dieser Person und bewahrt es auf. Das Foto jeder Person hat eine ID-Nummer. Wenn die Person wieder in Sicht kommt, teilt sie A ihre ID-Nummer mit und A findet ihr Bild anhand der ID-Nummer. Und voila! A weiß, wer diese Person ist.

Dasselbe gilt für HTTP. Es leidet unter KURZFRISTIGEM SPEICHERVERLUST. Es verwendet Sitzungen, um alles aufzuzeichnen, was Sie während der Nutzung einer Website getan haben, und dann, wenn Sie wiederkommen, identifiziert es Sie mit Hilfe von Cookies (Cookie ist wie ein Token). Das Bild ist hier die Sitzung, und die ID ist hier das Cookie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X