Was sind Cookies und Sitzungen und in welcher Beziehung stehen sie zueinander?

85

Ich versuche, Cookies und Sitzungen professionell zu verstehen. Ich weiß, dass wenn ein Browser eine Verbindung zu einem Server herstellt, der Server den Browser "auffordert", ein Cookie mit "phpsessid" in den Cookie-Ordner des Client-Browsers einzufügen.

Nachdem wir nun die "phpsessid" haben, sendet der Browser die "phpsessid" an den Server, wenn der Client den Server betritt, und der Server schaut sich den tmp-Ordner an. Wenn wir eine Übereinstimmung haben, lädt er alle Daten zurück, für die der Benutzer verfügt dieser Kunde, aber ich bin ein bisschen verwirrt mit dem Prozess.

Ich bin dankbar, wenn mir jemand helfen kann, die Prozesse zum Erstellen einer Sitzung und von Cookies zu verstehen - was hinter den Kulissen passiert.

Leertext
quelle
Anscheinend wissen Sie bereits, was passiert. Über welchen bestimmten Teil möchten Sie aufgeklärt werden? Der HTTP / Cookie-Teil oder wie lädt PHP den Sitzungsspeicher?
Mario
Das Cookie, das der Browser mit der phpsessid speichert, ist dies die phpsessid, um den Client für die Erstellung von Sitzungen und Cookies zu identifizieren?
Blanktext
Das Cookie, über das der Browser verfügt, enthält die PHP-Sitzungs-ID, die dem Server mitteilt, "Hey, ich kenne diesen Kerl". Der Server greift dann auf die Sitzungsdaten (z. B. von / tmp /) zu und stellt den Benutzer $ _SESSION
somedev
Ja, das weiß ich, aber ich frage, ob diese "phpsessid" verwendet wird, um den Client vor dem Erstellen von Sitzungen und Cookies zu identifizieren. Ist diese phpsessid in den Cookie-Daten und dem Client-Computer sowie in der Sitzungsdatei im Server-tmp-Ordner enthalten? ?
Blanktext

Antworten:

171

Lassen Sie uns das durchgehen:

Cookies und Sitzungen sind beide Möglichkeiten, um den Anwendungsstatus zwischen verschiedenen Anforderungen des Browsers beizubehalten. Ihnen ist es zu verdanken, dass Sie sich beispielsweise nicht jedes Mal anmelden müssen, wenn Sie eine Seite in StackOverflow anfordern.

Kekse

Cookies sind kleine Datenbits (maximal 4 KB lang), die Daten in einem Schlüssel-Wert-Paar enthalten:

name=value; name2=value2

Diese werden entweder über JavaScript oder über den Server mithilfe eines HTTP-Headers festgelegt .

Für Cookies ist ein Ablaufdatum festgelegt, beispielsweise mithilfe von HTTP-Headern:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

Dies würde dazu führen, dass der Browser ein Cookie name2mit dem Wert " set" setzt value2, das in etwa 9 Jahren abläuft.

Cookies gelten als sehr unsicher, da der Benutzer ihren Inhalt leicht manipulieren kann. Deshalb sollten Sie Cookie-Daten immer validieren . Gehen Sie nicht davon aus, dass das, was Sie von einem Cookie erhalten, unbedingt das ist, was Sie erwarten.

Cookies werden normalerweise verwendet, um den Anmeldestatus beizubehalten, wobei ein Benutzername und ein spezieller Hash vom Browser gesendet werden und der Server sie mit der Datenbank vergleicht, um den Zugriff zu genehmigen.

Cookies werden auch häufig bei der Erstellung von Sitzungen verwendet .

Sitzungen

Sitzungen sind etwas anders. Jeder Benutzer erhält eine Sitzungs-ID , die zur Überprüfung entweder per Cookie oder per GET-Variable an den Server zurückgesendet wird .

Sitzungen sind normalerweise nur von kurzer Dauer, was sie ideal zum Speichern des temporären Status zwischen Anwendungen macht. Sitzungen laufen auch ab, wenn der Benutzer den Browser schließt.

Sitzungen gelten als sicherer als Cookies, da die Variablen selbst auf dem Server gespeichert werden . So funktioniert das:

  1. Server öffnet eine Sitzung (setzt ein Cookie über den HTTP-Header)
  2. Server legt eine Sitzungsvariable fest.
  3. Client ändert Seite
  4. Der Client sendet alle Cookies zusammen mit der Sitzungs-ID aus Schritt 1.
  5. Der Server liest die Sitzungs-ID aus dem Cookie.
  6. Der Server stimmt mit der Sitzungs-ID aus einer Liste in einer Datenbank (oder einem Speicher usw.) überein.
  7. Server findet eine Übereinstimmung, liest Variablen, die jetzt auf $_SESSIONSuperglobal verfügbar sind.

Wenn PHP keine Übereinstimmung findet, startet es eine neue Sitzung und wiederholt die Schritte 1-7.

Sie können vertrauliche Informationen in einer Sitzung speichern, da diese auf dem Server gespeichert sind. Beachten Sie jedoch, dass die Sitzungs-ID weiterhin gestohlen werden kann, wenn sich der Benutzer beispielsweise über ein unsicheres WLAN angemeldet hat. (Ein Angreifer kann die Cookies schnüffeln und als eigene festlegen. Er sieht die Variablen selbst nicht, aber der Server identifiziert den Angreifer als Benutzer.)


Das ist der Kern davon. Sie können mehr über das PHP-Handbuch zu beiden Themen erfahren.

Madaras Geist
quelle
1
Bedeutet das also, dass Cookies aktiviert werden müssen, damit Sitzungen funktionieren?
Bigpotato
1
@ Edmund: In den meisten Fällen ja. Sie können es jedoch so einstellen, dass Sitzungs-IDs über die GET-Variable übertragen werden (was bedeuten würde, dass die Sitzungs-ID an jede Seite angehängt werden müsste ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Geist
Was genau bedeutet Browser auf Android- oder iPhone-Geräten schließen? App stoppen? Gerät ausschalten? Alle Registerkarten schließen und beenden? usw.
Vandervals
2
@SurajJain Es wäre, wenn es keine "Remember Me" -Kekse gäbe, die länger bestehen bleiben.
Madaras Geist
4
andere Frage: Wenn der Benutzer den Browser schließt, wie wird der Server durch dieses Ereignis benachrichtigt, sodass der Server diese Sitzungs-ID löscht? oder läuft es nach einiger Zeit automatisch ab?
user2774480