Die Sitzungserweiterung von PHP kann Sitzungsdaten in jedem Container speichern, solange der Container die Schnittstelle in php_session.h implementiert:
typedef struct ps_module_struct { const char *s_name; int (*s_open)(PS_OPEN_ARGS); int (*s_close)(PS_CLOSE_ARGS); int (*s_read)(PS_READ_ARGS); int (*s_write)(PS_WRITE_ARGS); int (*s_destroy)(PS_DESTROY_ARGS); int (*s_gc)(PS_GC_ARGS); char *(*s_create_sid)(PS_CREATE_SID_ARGS); } ps_module;
Wenn session.auto_start = 1 in php.ini definiert ist, The Die Sitzungserweiterung ruft während der Anforderungsinitialisierungsphase (rinit) s_open- und s_read-Daten auf.
Wenn session_start() auf der PHP-Seite aufgerufen wird (nur der erste Aufruf wird wirksam), ruft die Sitzungserweiterung auch s_open- und s_read-Daten auf.
Bei einigen Seiten, die keine Sitzungsdaten enthalten, führt das Lesen von Sitzungsdaten jedoch zu Leistungsverschwendung, z. B. bei Festplattenvorgängen oder Netzwerkvorgängen.
Wir müssen also einen Weg finden, Seiten mit Sitzungsdaten und Seiten ohne Sitzungsdaten unterschiedlich zu behandeln, aber der Verarbeitungscode muss konsistent sein.
Die Idee besteht darin, session.auto_start = 1 zu entfernen und in session.auto_start = 0 zu ändern und den Aufruf von session_start() für Anfragen ohne session_name im Cookie zu verzögern.
Wenn beim Aufruf kein session_name im Cookie vorhanden ist session_start(), die Sitzung Die Erweiterung generiert automatisch eine session_id und sendet den Set-Cookie-Header. Die Header-Informationen müssen ausgegeben werden, bevor die Seite den Inhalt ausgibt, oder der Seiteninhalt muss in den Ausgabepuffer gestellt werden, um die Ausgabe zu verzögern.
Die endgültige Implementierung lautet wie folgt:
auto_prepend_file:
<?php if (isset($_COOKIE[session_name()])) { define('SESSION_STARTED', true); @session_start(); } else { ob_start(); }
<?php if (!defined('SESSION_STARTED') && $_SESSION) { $session_copy = $_SESSION; @session_start(); if (!$_SESSION) { $_SESSION = $session_copy; } ob_end_flush(); }
Das Obige stellt die Verwendung der PHP-Sitzungsoptimierung vor, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.