Heim Backend-Entwicklung PHP-Tutorial Analyse und Verwendung von PHP-Sitzungsprinzipien

Analyse und Verwendung von PHP-Sitzungsprinzipien

Dec 05, 2016 am 09:53 AM
php

Ich habe zuvor in einem Blog namens Magic Lab einen Artikel mit dem Titel „Gründliche Analyse der PHP-Sitzungsprinzipien“ gelesen. Der Autor erläuterte die Änderungen in jedem Link und die damit verbundenen Änderungen im Prozess der Codeausführung aus der Perspektive der Sitzungsnutzung. Parametereinstellungen und Funktionen. Ursprünglich wollte ich den ursprünglichen Artikel erneut veröffentlichen, aber der ursprüngliche Blog wurde geschlossen. Ich weiß nicht, ob das an dieser groß angelegten erneuten Einreichung oder einem anderen Grund liegt. Einige Originalinformationen wurden durch Baidu-Schnappschüsse gefunden. Die nicht gefundenen werden nach vorherigem Verständnis neu organisiert, damit jeder die Sitzung besser verstehen kann.

Wedge: Sitzungssprache

Sitzung, auf Englisch übersetzt als „Gespräch“, zwei Personen unterhalten sich, vom ersten Hallo-Satz bis zum letzten Abschiedssatz, dies stellt ein Gespräch dar. Die Sitzung bezieht sich in PHP hauptsächlich auf die Konversation zwischen dem Client-Browser und dem Datenaustausch zwischen dem Server, vom Öffnen des Browsers bis zum Schließen, dem einfachsten Sitzungszyklus. Wie implementieren Computersprachen im Allgemeinen Konversationen? Um ein beliebtes Beispiel zu nennen:
Der Kellner ist wie ein Friseurladen, und der Kunde ist wie jeder Kunde, der sich die Haare schneiden lässt. Viele Friseurläden haben diese Art der Werbemethode Holen Sie sich eine umsonst. Es gibt ungefähr drei Möglichkeiten, dies zu erreichen:
1. Der Friseur hat ein gutes Gedächtnis. Er wird auf einen Blick wissen, wie oft Sie hier waren – das nennt man das Protokoll selbst.
2. Jeder Gast erhält eine Mitgliedskarte, und Sie können diese Karte bei jedem Einkauf mitbringen. Jeder Einkauf wird erfasst und natürlich mit einem Siegel versehen – dies wird als Sitzungsrealisierung bezeichnet durch Cookies. Der Nachteil ist, dass ich die Mitgliedskarte oder das offizielle Siegel nicht vollständig fälschen kann Persönliche Informationen oder sogar ein Passwort: Wenn jeder Kunde kommt, um einen Einkauf zu tätigen, gibt er seine Mitgliedsnummer an und zeichnet dann die Anzahl der Einkäufe im großen Kontobuch auf. Dies ist die Sitzungsimplementierung im Kopf des Gastes ist die auf dem Client gespeicherte SESSIONID und das große Hauptbuch sind die auf dem Server gespeicherten Sitzungsdaten. Im Vergleich zur zweiten Methode ist die Sicherheit viel höher, es sei denn, Sie sagen, dass Sie Ihre Mitgliedsnummer und Ihr Passwort verlieren Fälschen der SESSIONID des Kunden.

Da das http-Protokoll zustandslos ist, kann PHP Sitzungen nur über die beiden letztgenannten Methoden implementieren. Das erstere Cookie weist die bereits erwähnten Nachteile auf und ist nicht sehr sicher, sodass wichtige Sitzungen die Verwendung von Sitzungen bevorzugen. Die Sitzung muss auf einer Kennung basieren, die auch als Passwort verstanden werden kann, nämlich SESSIONID. Dies ist eine verschlüsselte Zeichenfolge, die auf dem Client gespeichert wird, normalerweise in einem Cookie. Jede Kommunikation zwischen dem Client und dem Server erfolgt über diese SESSIONID. Der Client meldet zuerst seine Heimatadresse, und dann kann der Server die darauf gespeicherten Sitzungsdaten finden Setzen Sie den Anruf fort.

Allgemeine Sitzungseinstellungen in php.ini

[Server]
session.save_handler = files
Der Standardwert ist file, der definiert, wie die Sitzung auf dem Server gespeichert wird bedeutet, die Sitzung auf dem Server zu speichern. Wenn wir andere Möglichkeiten zum Speichern anpassen möchten (z. B. die Verwendung einer Datenbank), müssen wir dieses Element auf

session.save_path festlegen = "/tmp/"
Definition Der Speicherort, an dem der Server temporäre Dateien für Sitzungen speichert.

session.auto_start = 0
Wenn auf 1 gesetzt, ist es nicht erforderlich, session_start() in jede Datei zu schreiben, die automatisch gestartet wird.

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
Diese drei Konfigurationen bilden zusammen den Garbage-Collection-Mechanismus der serverseitigen Sitzung session.gc_probability und session.gc_divisor Es stellt die Wahrscheinlichkeit der Sitzungsbereinigung dar. Die theoretische Erklärung besteht darin, dass der Server eine bestimmte Wahrscheinlichkeit hat, die Sitzung regelmäßig zu bereinigen: gc_probability/gc_divisor Dies bedeutet, dass bei der Initialisierung jeder neuen Sitzung eine Wahrscheinlichkeit von 1 % besteht, dass das Garbage Collection-Programm gestartet wird, und der Reinigungsstandard die durch session.gc_maxlifetime definierte Zeit ist.

[Client]
session.use_cookies = 1
Die von der Sitzungs-ID auf dem Client verwendete Speichermethode bedeutet, dass gleichzeitig die Sitzungs-ID des Clients verwendet wird wird $ in der Variablen $_COOKIE sein. Das Element _COOKIE['PHPSESSIONID'] existiert

session.use_only_cookies = 1
definiert auch die Speichermethode, die nur von der Sitzungs-ID verwendet wird Verwendung von Cookies zur Speicherung der Sitzungs-ID. Im Allgemeinen unterstützen Clients jetzt Cookies. Daher wird empfohlen, den Wert auf 1 zu setzen, um Angriffe im Zusammenhang mit der Weitergabe von Sitzungs-IDs über URLs zu verhindern.

session.use_trans_sid = 0
Entspricht der Einstellung oben auf 1, bedeutet dies, dass die Sitzungs-ID über den URL-Parameter übergeben werden darf 0;

session .referer_check =
Diese Einstellung wird nur wirksam, wenn session.use_trans_sid = 1. Der Zweck besteht darin, den „Referer“ im HTTP-Header zu überprüfen, um festzustellen, ob die Sitzungs-ID in der enthalten ist Die URL ist gültig. HTTP_REFERER muss die durch diesen Parameter angegebenen Zeichen enthalten, andernfalls wird die Sitzungs-ID in der URL als ungültig betrachtet. Daher ist der Standardwert normalerweise leer, dh es erfolgt keine Überprüfung.

session.name = PHPSESSID
Definieren Sie den Namen der Sitzungs-ID, dh den Variablennamen, der über das Browser-HTTP-Tool

session.hash_function = angezeigt werden kann 0
Wählen Sie die Verschlüsselungsmethode von session_name aus, 0 steht für MD5-Verschlüsselung, 1 steht für SHA1-Verschlüsselung, der Standardwert ist 0, aber es wird gesagt, dass die Verschlüsselung mit der SHA1-Methode sicherer ist

session.hash_bits_per_character = 4
Geben Sie an das Zeichen in session_name Wie viele Binärziffern in jedem Zeichen in der Zeichenfolge gespeichert sind. Diese Binärziffern sind die Ergebnisse der Hash-Funktion.
4 Bits: 0-9, a-f
5 Bits: 0-9, a-v
6 Bits: 0-9, a-z, A-Z, "-", ","

url_rewriter .tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
Geben Sie an, welche HTML-Tags neu geschrieben werden sollen, um sid(session_id) einzuschließen (nur geöffnet in „session.use_trans_sid“) gültig) fügt der URL-Rewriter ein verstecktes „“ hinzu, das zusätzliche Informationen enthält, die an die URL angehängt werden sollen.

session.cookie_lifetime = 0
Der Lebenszyklus der Cookie-Datei, die die Sitzungs-ID speichert, bedeutet, dass die Sitzung beendet ist und die Sitzungs-ID automatisch verschwindet Zum Schließen geht die letzte verloren. session.cookie_path = /
Speichern Sie den Speicherort der session.cookie_domain = /
Speichern Sie die Domänennamen-Einstellung des Sitzungs-ID-Cookies. Sie hängt mit der Zugriffsberechtigungseinstellung des Domänennamens zusammen, die von Cookies zugelassen wird. Im Allgemeinen gilt, wenn Sie möchten, dass alle Verzeichnisse Ihrer Website darauf zugreifen können Wenn Sie mehr über die Cookies des Clients erfahren möchten, können Sie sich den Domänenparameter

session.bug_compat_42 = 1session.bug_compat_warn = 1
Diese beiden Einstellungen gelten als fast aufgegeben und dienen hauptsächlich der Funktion „session_register“, da „register_global“ von PHP5 standardmäßig geschlossen ist, ebenso wie die Funktion „session_register“. wird in PHP5 überhaupt nicht verwendet; und PHP6 wird diese Einstellung abschaffen und sie direkt als geschlossen definieren, daher besteht keine Notwendigkeit, diese beiden zu studieren.


Was macht session_start()?

Angenommen, dass mehrere Schlüsselparameter der Sitzung in php.ini wie folgt konfiguriert sind:
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session .save_path = "/tmp/"



Im Folgenden werden Codebeispiele verwendet, um die Rolle von session_start während einer Sitzung zu veranschaulichen.

Programm 1:

session_start();

$_SESSION['uname'] = 'monkey';
$_SESSION['ukey'] = 20119999 ;
?>


Nachdem Programm 1 ausgeführt wurde, führt session_start() zwei Dinge aus:

1 Erzeugt ein Cookie auf dem Client, um PHPSESSID zu speichern Der Speicherort und die Methode dieser Datei hängen von der Ausführungsmethode des Programms ab. Dieser Schritt generiert eine serialisierte Zeichenfolge – PHPSESSID, um die entsprechenden Plug-Ins anzuzeigen -ins. httpfox, Webentwickler usw. in Firefox sind allesamt gute Tools.


2. Erzeugen Sie eine temporäre Datei auf dem Server, um Sitzungsdaten zu speichern. Der Name ähnelt „sess_85891d6a81ab13965d349bde29b2306c“. ist eine Sitzungsdatei. „ 85891d6a81ab13965d349bde29b2306c“ ist die PHPSESSID dieser Sitzung, die mit dem PHPSESSID-Wert des Clients übereinstimmt.

Öffnen Sie die Datei „sess_85891d6a81ab13965d349bde29b2306c“ mit einem Editor und Sie sehen eine Inhaltszeichenfolge wie „uname|s:6:“monkey“;ukey|i:20119999;“. In dieser Datei wird der spezifische Inhalt der Variablen $_SESSION gespeichert. Jede Variable wird durch ein „;“ getrennt.

Das Format ist: Variablenname |. Variablentyp: [Länge]: Wert; Zum Beispiel bedeutet: uname|s:6:"monkey"; Die Wertlänge ist 6, der Wert ist Monkey.

Dann stellt sich die Frage: Sind die beiden oben genannten Dinge abgeschlossen, wenn das Programm mit session_start() ausgeführt wird? Wer kommt zwischen diesen beiden Dingen zuerst und wer kommt zuletzt?

Lassen Sie das Experiment beweisen, ändern Sie das Programm leicht:


Programm 2:
session_start();
$_SESSION['uname'] = 'monkey ' ;
$_SESSION['ukey'] = 20119999;

sleep(30);

Löschen Sie zuerst alle Sitzungsdaten auf dem Client und dem Server Führen Sie dann Programm 2 aus, nutzen Sie die 30 Sekunden Ruhezeit im Programm, um den Sitzungsstatus von Client und Server zu überprüfen, und stellen Sie fest, dass: Während der Ausführung des Programms hat der Client keine Cookie-Datei zum Speichern der PHPSESSID erstellt , aber der Server hat sie bereits gespeichert, aber die Datei enthält keinen Inhalt. Nach 30 Sekunden wird die Cookie-Datei des Clients generiert und die Sitzungsdatei des Servers enthält.


Daraus lässt sich schließen, dass der allgemeine Prozess wie folgt aussehen sollte: Wenn das Programm session_start() ausführt, generiert der Server zuerst PHPSESSID und die entsprechende Sitzungsdatei, aber wenn das Programm $_SESSION zuweist, gibt es kein Schreiben Nehmen wir an, dass der entsprechende Wert in der Sitzungsdatei gespeichert ist. Nachdem das Programm ausgeführt wurde, wird die Cookie-Datei, die die PHPSESSID speichert, auf dem Client generiert und der Wert in der Variablen $_SESSION wird auf den Server geschrieben Was die letzten beiden Schritte betrifft, die zuerst kommen, habe ich in der Sitzungsdatei noch keine gute Möglichkeit gefunden, dies zu beweisen.


Zur weiteren Demonstration löschen Sie den sitzungsbezogenen Inhalt auf dem Client und dem Server, führen Sie Programm 3 aus und beobachten Sie die Ergebnisse des ersten und zweiten Mals:
Programm 3:
session_start();
$_SESSION['uname'] = 'monkey';
$session_id = session_id(
$sess_file = "/tmp/sess_". $session_id;
$content = file_get_contents($sess_file);

echo '***'.$_COOKIE['PHPSESSID'] .'***';
echo '
' . $_SESSION['uname'] '
echo '***'.'***';

Das Obige ist die Ausführungsmethode des ersten session_start(), das heißt, was getan wird, wenn der erste session_start() in einer Reihe von Programmen erscheint. Schauen wir uns den nachfolgenden session_start() an:

Angenommene php.ini-Konfiguration: session.cookie_lifetime = 0 

Programm 4:
session_start();
echo $_SESSION['uname'] ;
echo $_SESSION['ukey'];
?> Sitzungsinhalt, führen Sie das Programm 4 aus. Der normale Inhalt wird gedruckt. Was wird zu diesem Zeitpunkt passieren, wenn Sie den Browser gewaltsam schließen und dann Programm 4 ausführen?



Zuerst wird session.cookie_lifetime auf 0 gesetzt, was bedeutet, dass die Lebensdauer der vom Client mit PHPSESSID gespeicherten Cookie-Datei 0 ist. Wenn der Browser eingeschaltet ist, beträgt der Wert von PHPSESSID wird im Speicher gespeichert. Sobald es gewaltsam geschlossen wird, wird gleichzeitig die Cookie-Datei, die PHPSESSID speichert, zerstört, aber der Server führt session_destroy() nicht aus, sodass die Sitzungsdatendatei auf dem Server immer noch vorhanden ist. aber wenn der Browser das Ausführungsprogramm 4 erneut öffnet, wird nichts ausgegeben. Aus dieser Überlegung:

session_start() ruft zuerst die PHPSESSID im Client-Cookie ab und kombiniert sie dann mit „sess_“, um ein zu bilden Geben Sie den Dateinamen ein, gehen Sie zum Server, um die Datei zu finden, und entnehmen Sie dann den Inhalt der Datei. Fügen Sie den Inhalt zur Verwendung in die globale Variable $_SESSION ein. Wenn der Browser gewaltsam geschlossen und erneut geöffnet wird, geht die vorherige Ausführung von session_start() verloren, was der oben genannten ersten Ausführung entspricht, und es wird eine neue PHPSESSID generiert. Diese PHPSESSID kann nicht mit der sess_-Datei des vorherigen Servers übereinstimmen . , daher kann der Inhalt nicht abgerufen werden. Natürlich gibt es auch auf dem Server eine Datei, die dieser PHPSESSID entspricht, aber diese Datei ist noch leer.

Um den Mechanismus zu realisieren, dass sich derselbe Benutzer nur von einem Computer oder sogar einem Browser aus anmelden kann, erzwingen einige Systeme daher das Schließen des Browsers, wenn die Einstellung session.cookie_lifetime nicht geändert wird Wenn sich der Benutzer nicht anmelden kann, bevor die serverseitige Sitzungslebensdauer abläuft, ist es besser, session.cookie_lifetime auf einen relativ großen Wert zu setzen. Dies hat jedoch keine Auswirkung, wenn eine Cookie-Datei länger vorhanden ist.


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

See all articles