[Powered by Google Translate] [PHP Sessions]
[Tommy MacWilliam, Harvard University]
[Dies ist CS50.] [CS50.TV]
Sessions in PHP verwendet werden, um die Funktionalität zu implementieren,
wie Benutzer-Logins, in Ihrem Web-App.
PHP-Sessions können Sie Informationen zu verknüpfen
mit der gesamten Browser-Sitzung des Benutzers
anstatt einfach nur einer einzigen Seite.
Das heißt also, wenn der Benutzer besucht, verschiedene PHP-Seiten, aus denen sich Ihre Website,
alle Informationen in der Session wird anhalten.
Das heißt also, dass die Daten in der Sitzung von einer Seite gespeichert
können später von einer anderen Seite zugegriffen werden.
Das Speichern von Informationen in einer Sitzung ist einfach,
und wir tun dies über die Dollarzeichen, Unterstrich, Hauptstadt SESSION-Variable.
Dollarzeichen, Unterstrich, SESSION-wie Dollarzeichen, Unterstrich, GET
und Dollar-Zeichen, Unterstriche, POST-
ist ein assoziatives Array, bestehend aus Schlüssel-Wert-Paaren.
So können wir wie Syntax-Dollar-Zeichen zu verwenden, zu unterstreichen, SESSION,
Halterung, zitat, foo, zitat, Klammer, gleich, zitat, Bar, quote-
, um den Wert "bar" in der Schlüssel speichern "foo".
Doch bevor wir schreiben oder lesen aus der Sitzung Array
wir brauchen, um eine spezielle Funktion-Call
Sitzung, zu unterstreichen, starten, () -
und dies wird die Sitzung zu initialisieren.
Werfen wir also einen Blick auf ein Beispiel.
Unsere erste Seite hello.php, verwendet das Session Ausgangs einige Daten für den Benutzer.
Denken Sie daran, wir brauchen, um zu verwenden, bevor session_start können wir keine Sitzungsdaten zugreifen.
Jetzt sind wir mit PHP isset, um festzustellen, ob ein Schlüssel vorhanden
in der $ _SESSION assoziatives Array.
Wenn das Schlüssel vorhanden ist, bedeutet, dass der Benutzer angemeldet hat,
so dass wir den Namen des Benutzers anzuzeigen.
Wenn diese Taste nicht gesetzt ist, bedeutet, dass der Benutzer nicht eingeloggt,
so werden wir einen Link zu login.php anzuzeigen.
Werfen wir also einen Blick auf login.php.
Hier unten haben wir einen einzigen HTML-Formular mit einem einzigen Eingang.
Action-Attribut des Formulars ist $ _SERVER ['PHP_SELF'],
und das bedeutet einfach, dass wir wollen, dass die Form, um an der aktuellen Datei eingereicht werden,
, der in diesem Fall ist login.php.
Lassen Sie uns also zurück an den Anfang der Datei zu gehen.
Wenn der Benutzer das Formular eingereicht, dann $ _POST ['name'] gesetzt werden.
Für weitere Informationen über HTML-Formulare und Post,
Besuche die PHP Web-Entwicklung Video.
Im Falle, dass der Benutzer tat finden,
möchten wir den Wert, den sie tippte in die Sitzung zu schreiben.
Jetzt können wir den Benutzer auf hallo.php umleiten.
Weil wir die Eingabe des Benutzers in die Sitzung gespeichert haben,
hello.php in der Lage, den Wert, der in login.php gesetzt war zugreifen.
Lassen Sie uns also check this out in einem Web-Browser.
Zunächst werden wir auf http://localhost/hallo.php navigieren.
Wir können hier sehen, dass wir noch nicht eingeloggt,
und wir klicken auf den Login-Link, der uns umgeleitet wird login.php.
Okay, ich werde geben in meinem Namen, der wird dann in der Session gespeichert werden.
Great! Jetzt können wir meine Eingabe von login.php auf hello.php über die Sitzung zu sehen.
Also, was ist mit der Anmeldung der Benutzer aus?
Nun, um die Benutzer sich anmelden, wir einfach gespeichert einen Wert in Sitzungsnamen ein.
Also, um den Benutzer abmelden, müssen wir einfach diesen Namen Schlüssel entfernen
aus der Sitzung Array.
Werfen wir also einen Blick auf diesen letzten Datei logout.php.
Wieder einmal müssen wir session_start () aufrufen
bevor wir etwas tun Sitzung verwandt.
Jetzt können wir einfach anrufen session_destroy ()
die Pflege der immer alle Daten in der Session los finden wird
und leiten den Benutzer zurück zur hello.php.
Also, wenn ich auf den Abmelden Link klicken,
können wir sehen, dass der Server hat vergessen, wer ich bin,
und ich bin nicht mehr angemeldet
Also, was ist denn hier unter der Haube?
Um das Verhalten, das wir gerade gesehen, zu bekommen,
unserem Server muss zwei Dinge tun.
Zuerst muss der Server die Daten in der Session irgendwie zu speichern.
Die verschiedenen PHP-Dateien, die eine Website umfassen
als separate Aufrufe der PHP-Interpreter ausgeführt
so lokale Variable kann nicht zwischen ihnen geteilt werden.
Stattdessen unsere Session-Daten speichern muss der Server
in einem Ort, der mehrere. php-Dateien zugreifen können.
Zweitens muss der Server die Sitzungsdaten mit nur meine Browser-Sitzung zu verbinden.
Wenn ich dich ein, um Facebook,
es gibt wahrscheinlich Millionen anderer Menschen auch in Facebook zur gleichen Zeit eingeloggt.
Aber der Server muss eine Möglichkeit der Zuordnung meine Daten
mit meinem aktuellen Sitzung und die Daten jemand anderes mit einer anderen Sitzung.
Zum Glück, die Autoren von PHP dachte über all dies für uns,
so brauchen wir nicht zu einem dieser uns selbst zu implementieren.
Aber lassen Sie uns einen Blick an, was PHP funktioniert standardmäßig.
Wenn ich eine PHP-Seite besuchen session_start zum ersten Mal enthält,
PHP wird eine große Zufallswert zu generieren.
Bis session_destroy heißt-oder ich weiß nicht besuchen keine PHP-Seiten auf dieser Website für eine Weile-
dass zufällige und wahrscheinlich einzigartigen Wert wird mit mir in Verbindung gebracht werden.
So der Server über einen Weg zur Identifizierung von meinem Browser-Sitzung
im Gegensatz zu jemand anderem.
Wir können einen Blick auf die aktuelle Session-ID zu nehmen
Verwendung der PHP-Funktion, session.
Hier sind wir einfach die Ausgabe den Wert unserer Session-ID.
Also, wenn wir uns wieder auf das Beispiel Web-App anmelden,
und jetzt navigieren Sie zu sessid.php,
wir werden diese lange Kette von Zeichen sehen,
und das ist die aktuelle Kennung für meine Session,
und das ist, wie der Server die Verfolgung der, der ich bin.
Okay, aber wir haben nur die Hälfte des Problems gelöst.
Klar, hat der Server nun eine Möglichkeit mich zu identifizieren,
aber wenn ich eine andere Seite besuchen, muss der Server die gleiche Kennung wiederverwenden
anstatt ein neues zu generieren.
Denken Sie daran, wenn ich erklären, eine lokale Variable in foo.php
und besuchen Sie dann bar.php,
bar.php hat keine Möglichkeit, zu wissen, was in foo.php passiert.
Also die Standard php Sitzung Umsetzung erfordert, dass der Browser den Server erinnern
die Session-ID zu bedienen.
Dies wird in der Form eines Cookies durchgeführt.
Ein Cookie-in ist nicht nur ein leckerer Snack-
ist einfach eine kleine Textdatei, die auf Ihrem Computer
dass ein Server über den Web-Browser zu schreiben.
Also nach meinem PHP erzeugt eindeutige Sitzungs-ID über session_start,
es geht um den Web-Browser zu sagen, dass die Kennung in einer lokalen Textdatei oder einem Cookie speichern.
Dann wird der Web-Browser wird in jeder Anforderung gehören, dass die Kennung
dass es sinn an den Server.
Also wirklich, der Web-Server nicht erinnern, wer ich bin.
Stattdessen wird der Web-Browser einfach die Erinnerung an die eindeutige Kennung
das wurde von PHP erzeugt und dann ständig daran erinnert den Server
was das Bezeichner ist.
Auf diese Weise Informationen wie meinen Benutzernamen auf dem Server nicht meine Web-Browser gespeichert.
Der Browser zeigt einfach den Server, auf dem PHP gespeichert, dass Informationen
so PHP kann es abzurufen.
Damit stellt sich die Frage, wo ist eigentlich PHP Speichern dieser Informationen?
Standardmäßig wird PHP Session Daten speichern
in einer Datei in / tmp oder das "Temp"-Ordner.
Der Name der Datei wird auch die PHP-Session-ID, so bestimmen kann,
die Datei zum Lesen und Schreiben von nur über die Session-ID.
Gut. Also lassen Sie öffnen die Registerkarte Netzwerk in Chrome-Debugger
über das Schraubenschlüssel-Symbol oben rechts.
Nun wollen wir den Kopf wieder hallo.php.
Lassen Sie auf die HTTP-Anfrage an hallo.php
und klicken Sie dann auf Sockel.
Hier können wir sehen, dass die Cookie-Header einen Schlüssel namens PHPSESSID enthält,
oder PHP-Session-ID mit einem Wert, dass gleichen langen String, den wir gesehen haben, ist
als wir besuchten sessid.php.
Das ist genau wie der Browser erinnert, welche den Server Session-ID verwendet werden soll.
Es ist die Aufnahme in einem HTTP-Header.
Gut. Lassen Sie den Kopf zurück zum Terminal.
Lassen Sie navigieren auf / tmp, wo PHP die Session-Informationen zu speichern standardmäßig.
Sicher genug, Innere dieser temporären Ordner,
hier ist eine Datei, die exakt das gleiche Session-ID enthält.
Wenn wir diese Datei zu öffnen, können wir sehen, wie PHP, die meine Session auf der Festplatte.
Hier die Zeichenfolge "Tommy" wird für die Schlüssel gespeichert 'name'
das ist genau das, was wir erwartet hatten.
Und das ist ein Überblick über die Sessions in PHP.
Was wir gerade gesehen habe, war nur die Standardimplementierung von Sitzungen.
In der Tat, viele Websites ändern dieses Standardverhalten
PHP-Sitzungen effizienter speichern
im Interesse der Verbesserung der Leistung.
Mein Name ist Tommy, und dies ist CS50.
[CS50.TV]