Unter „Sitzung“ versteht man die Zeit, die vom Betreten der Website bis zum Schließen des Browsers vergeht, wenn der Benutzer auf einer Website surft, also die Zeit, die der Benutzer mit dem Surfen auf der Website verbringt. Aus der obigen Definition können wir ersehen, dass es sich bei der Sitzung tatsächlich um ein spezifisches Zeitkonzept handelt.
Im Allgemeinen können Variablen (bezogen auf serverseitige Variablen, siehe unten) auf einer bestimmten Seite der Website nicht auf der nächsten Seite verwendet werden. Dies ist mit der Sitzung einfacher zu handhaben. In der Sitzung registrierte Variablen können als globale Variablen verwendet werden. Auf diese Weise können wir Sitzungen zur Authentifizierung der Benutzeridentität, zur Aufzeichnung des Programmstatus und zur Parameterübertragung zwischen Seiten verwenden.
Wie wird die Sitzung in der PHP3-Version implementiert?
PHP3 selbst implementiert die Sitzungsfunktion nicht. Wir können sie nur mit anderen Methoden implementieren. Die bekannteste davon ist phplib. Zu den grundlegendsten Funktionen von phplib gehören Benutzerauthentifizierung, Sitzungsverwaltung, Berechtigungen und Datenbankabstraktion. Als nächstes beschreiben wir, wie man phplib zum Implementieren einer Sitzung verwendet.
1. Installieren Sie zuerst phplib (die Umgebung ist win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21).
Entpacken Sie zunächst phplib Installationsverzeichnis. Beispiel: Apache wird im Verzeichnis d:Apache installiert. Kopieren Sie dann das Verzeichnis „php“ nach d:Apache und kopieren Sie die Dateien und Verzeichnisse im Seitenverzeichnis des phplib-Verzeichnisses (mit Ausnahme des Verzeichnisses selbst) nach d: Unter Apachehtdocs.
Die phplib-Klassenbibliothek muss entsprechend dem System initialisiert werden, und möglicherweise muss die Datei local.inc geändert werden, die einige grundlegende Parameter enthält, die entsprechend der tatsächlichen Situation Ihres eigenen Computers geändert werden können.
Ändern Sie das Programm in der Datei d:Apachephpprepend.php wie folgt:
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/" //Der Pfad zum PHP-Verzeichnis unter phplib
}
Ändern Sie die Datei d:Apachephplocal.inc:
class DB_Example erweitert DB_Sql {
var $Host = "localhost"; //Der Hostname der MySQL-Datenbank var $Database = "test" //Datenbankname var $User = "root" //Datenbankbenutzername var $Password = "1234567"; // Datenbankbenutzerpasswort
}
Schließlich wird die anfängliche Tabelle basierend auf der Datei „create_database.mysql“ im Unterverzeichnis „stuff“ im Verzeichnis „phplib“ generiert.
Da jede Seite, die phplib verwendet, zunächst in der Lage sein muss, die zum Ausführen von phplib erforderlichen Klassenbibliotheksdateien zu finden, können wir die Variable auto_prepend in php.ini so einstellen, dass sie eine prepend.php-Datei enthält und auto_prepend als „d:/“ angibt. Apache/php/prepend.php“ (mit Anführungszeichen) enthält jede Seite automatisch die phplib-Klassenbibliothek. Wir können der Include-Variable auch das Verzeichnis hinzufügen, in dem sich die phplib-Klassenbibliothek befindet, damit diese Dateien gefunden werden können. 2. Rufen Sie
auf jeder Seite mit phplib die Funktion page_open zur Initialisierung auf, zum Beispiel:
<?php
page_open(array("sess" => "Test_Session"));
?>
Array-Variablen (sess) werden zum Initialisieren einiger zustandsspeichernder Objekte verwendet. Hierbei ist zu beachten: In phplib integrierte Namen (sess) müssen in local.inc definiert werden.
Da phplib Cookies zum Speichern von Statusinformationen verwendet, muss die Funktion page_open() aufgerufen werden, bevor der Seiteninhalt an den Browser ausgegeben wird. Das PHP-Skript sollte mit page_close() enden, wodurch die relevanten Statusdaten zurück in die Datenbank geschrieben werden, andernfalls gehen die Variablen verloren.
3. Spezifische Verwendung.
Nachdem Sie eine Variable registriert haben, können Sie sie auf nachfolgenden Seiten verwenden, bis die Sitzung endet. Methode:
<?php $sess->register( "varname"); ?>
Beachten Sie, dass es sich bei varname hier nicht um einen Variablenwert, sondern um einen Variablennamen handelt. Sie können zuerst den Variablennamen angeben und dann den Wert zuweisen. Sie können den Wert einer Variablen auf einer bestimmten Seite ändern. Der geänderte Wert wird erhalten, wenn auf den folgenden Seiten auf die Variable zugegriffen wird. Die Arten von Variablen sind vielfältig und können eine Zeichenfolge, eine Zahl oder ein Array sein. Zum Beispiel:
erste Seite:
<?php
page_open(array("sess" => "Test _Session"));
$sess->register( "welcome"); //Variable $welcome registrieren, beachten Sie, dass kein $ hinzugefügt werden muss
$welcome="Hallo, PHP-Welt!";
…
page_close();
?>
Zweite Seite:
<?php
page_open();//Sitzung starten
echo $welcome;//Anzeige des auf der ersten Seite definierten $welcome
page_close();//Statusinformationen speichern
?>
Nach der Registrierung einer Variablen wird jede Sitzungsvariable in die Datenbank zurückgeschrieben, wenn die Seite schließlich die Funktion page_close() aufruft. Wenn Sie vergessen, die Funktion page_close() aufzurufen, werden die Variablen nicht in die Datenbank zurückgeschrieben, was unvorhersehbare Folgen haben wird. Wenn die Variable verwendet wurde und nicht mehr benötigt wird, kann die folgende Funktion aufgerufen werden, um die Variable zu löschen:
<?php
page_open(array("sess" => "Test _Session"));
…
$sess->unregister( "Variablenname");
…
page_close();
?>
Wie implementiert man eine Sitzung in der PHP4-Version?
Die Sitzung von PHP4 ist auch auf Cookies angewiesen, um Sitzungs-IDs zu speichern, und verwendet das Dateisystem zum Speichern von Variablen (standardmäßig). Daher können die Sitzungsvariablen keine Objekte speichern. Selbstverständlich kann die Sitzung auch in der Datenbank gespeichert werden.
Es gibt viele sitzungsbezogene Funktionen in PHP4 (Einzelheiten finden Sie im Artikel php.ini-Konfiguration). Normalerweise müssen wir nur drei Funktionen aufrufen: session_start(), session_register(), session_is_registered().
Rufen Sie die Funktion session_start() am Anfang jeder Seite auf, die eine Sitzung erfordert, zum Beispiel:
<?session_start()?>
<html><body>
<?
$welcome="Hallo Welt!";
session_register("welcome");//$welcome-Variable registrieren, beachten Sie, dass es kein $-Symbol gibt if(session_is_registered("welcome"))//Überprüfen Sie, ob die $welcome-Variable registriert ist echo "welcome-Variable wurde registriert!";
anders
echo „Die Willkommensvariable wurde noch nicht registriert!“;
?>
</body></html>
Um die Sitzungsverarbeitung in PHP4 anzupassen,
müssen wir 6 Funktionen erweitern:
·sess_open($sess_path, $session_name);
Diese Funktion wird vom Sitzungshandler zur Initialisierung aufgerufen.
Der Parameter $sess_path entspricht der Option session.save_path in der Datei php.ini. Der Parameter $session_name entspricht der Option session.name in der Datei php.ini.
·sess_close();
Diese Funktion wird aufgerufen, wenn die Seite die Ausführung beendet und der Sitzungshandler geschlossen werden muss.
·sess_read($key);
Diese Funktion ruft den Bezeichner ab und gibt ihn zurück, wenn der Sitzungshandler den angegebenen Sitzungsschlüsselwert ($key) liest ). (Hinweis: Serialisierung ist eine Technologie, die Variablen oder Objekte am Ende des Programms oder bei Bedarf in einer Datei speichert und sie dann in den Speicher überträgt, wenn das Programm das nächste Mal ausgeführt wird unterscheidet sich von der Methode, nur Daten zu speichern. )
·sess_write($key, $val);
Diese Funktion wird aufgerufen, wenn der Sitzungshandler die Daten speichern muss, was häufig am Ende des Programms geschieht. Es ist dafür verantwortlich, die Daten an einem Ort zu speichern, an dem sie beim nächsten Mal mit der Funktion sess_read($key) abgerufen werden können.
·sess_destroy($key);
Diese Funktion muss die Sitzung zerstören. Es ist für das Löschen der Sitzung und das Löschen der Umgebung verantwortlich.
·sess_gc($maxlifetime);
Diese Funktion ist für die Bereinigung von Fragmenten verantwortlich. In diesem Fall ist er für die Löschung veralteter Sitzungsdaten verantwortlich. Sitzungshandler rufen sie gelegentlich auf.
Das benutzerdefinierte Programm kann je nach Situation eine MySQL-Datenbank oder eine DBM-Datei zum Speichern von Sitzungsdaten verwenden. Wenn Sie MySQL zur Unterstützung verwenden, müssen Sie die folgenden Schritte ausführen:
Erstellen Sie zunächst eine Sitzungsdatenbank in MySQL und eine Sitzungstabelle:
mysql> CREATE DATABASE session;
mysql>GRANT ON-Sitzungen auswählen, einfügen, aktualisieren, löschen.* TO phpsession@localhost
-> IDENTIFIZIERT DURCH 'phpsession';
mysql> CREATE TABLE-Sitzungen (
-> sesskey char(32) nicht null,
-> expiry int(11) unsigned not null,
-> Werttext nicht null,
-> PRIMÄRSCHLÜSSEL (Sesskey)
-> );
Als nächstes ändern Sie die $SESS_DB*-Variablen in der Datei session_mysql.php, um sie an die Datenbankeinstellungen auf Ihrem Computer anzupassen:
<?
$SESS_DBHOST = "localhost"; /* Datenbank-Hostname*/
$SESS_DBNAME = "sessions"; /* Datenbankname*/
$SESS_DBUSER = "phpsession"; /* Datenbankbenutzername*/
$SESS_DBPASS = "phpsession"; /* Datenbankpasswort*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Benutzerdefinierte Funktion
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Passen Sie die Schnittstelle an, wenn Sie DBM-Dateien verwenden:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Angepasste Funktion
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Sitzungsspezifischer Testcode:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//Welche Schnittstelle verwendet werden soll
elseif ($handler == "mysql") include("session_mysql.php");
sonst…
session_start();
session_register("count");
…
?>
Wie verwende ich Session bei der Authentifizierung?
Sitzung kann zur Benutzerauthentifizierung verwendet werden:
Überprüfen Sie, ob der Benutzer legitim ist:
<?
session_start();
……//Verifizierungsprozess session_register("reguser");
?>
Überprüfen Sie, ob der Benutzer auf einer anderen Seite angemeldet ist
<?
session_start();
if(isset($reguser)&&$reguser!=""){//Wenn Sie sich angemeldet haben echo "Sehr geehrter Benutzer, willkommen";
}else{//Wenn Sie nicht angemeldet sind echo „Bitte registrieren Sie sich zuerst!“;
}
?>
Benutzer meldet sich ab:
<?
session_destroy();
…
?>
Wie implementiert man mehrere gleichzeitig laufende Sitzungen?
Frage: Als ich ein Einkaufs-, Verkaufs- und Lagersystem für meine Einheit schrieb, stellte ich fest, dass es notwendig war, mehreren Benutzern den gleichzeitigen Zugriff auf eine PHP-Anwendung zu ermöglichen. Die ursprünglich entworfene statische eindeutige Sitzungs-ID verursachte Datenverwirrung. Auf diese Weise erhält die dynamische Generierung einer eindeutigen Sitzungs-ID höchste Priorität.
Die Lösung ist einfach: Ich habe den PHP-Dateinamen + Zeitstempel als eindeutige Sitzungs-ID verwendet, damit jede Sitzung in meinem Programm an ihrem Platz ist und es keine Verwirrung mehr gibt.
Ich werde meinen Quellcode unten veröffentlichen, damit Freunde, die das gleiche Problem haben, eine Lösung finden können.
//Starten Sie eine PHP-Sitzung, um Variablen beizubehalten.
if (empty($mysessionname)) {
$micro = microtime();
$micro = str_replace(" ","",$micro); // die Leerzeichen entfernen
$micro = str_replace(".","",$micro); // die Punkte entfernen
$mysessionname = "po_maint" .
}
Sitzungsname($mysessionname);
session_start();
Programmhinweise:
Verwenden Sie mysessionname, um Variablen für den eindeutigen Sitzungsnamen zwischen Seiten zu übergeben, müssen Sie eine kleine Änderung im obigen Programm vornehmen. Mysessionname kann nicht der interne Variablenname der Sitzung sein, da er bereits vor Beginn der Sitzung vorhanden ist. Mysessionname kann nicht im Cookie-Modus gespeichert werden, da bei mehreren Sitzungen die ursprüngliche Cookie-Datei definitiv überschrieben wird. Sie können es mithilfe ausgeblendeter Formularfelder speichern. Dann wird es kein Problem geben.