La session fait référence au temps qui s'écoule entre l'entrée sur le site Web et la fermeture du navigateur lorsque l'utilisateur navigue sur un site Web, c'est-à-dire le temps que l'utilisateur passe à naviguer sur le site Web. D’après la définition ci-dessus, nous pouvons voir que Session est en fait un concept temporel spécifique.
De manière générale, les variables (faisant référence aux variables côté serveur, les mêmes ci-dessous) dans une certaine page du site Web ne peuvent pas être utilisées dans la page suivante. C'est plus facile à gérer avec la session. Les variables enregistrées dans la session peuvent être utilisées comme variables globales. De cette façon, nous pouvons utiliser la session pour l'authentification de l'identité de l'utilisateur, l'enregistrement de l'état du programme et le transfert de paramètres entre les pages.
Comment la session est-elle implémentée dans la version PHP3 ?
PHP3 lui-même n'implémente pas la fonction de session. Nous ne pouvons utiliser que d'autres méthodes pour l'implémenter, dont la plus connue est phplib. Les fonctions les plus basiques de phplib incluent l'authentification des utilisateurs, la gestion des sessions, les autorisations et l'abstraction de la base de données. Nous décrirons ensuite comment utiliser phplib pour implémenter une session.
1. Installez d'abord phplib (l'environnement est win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 pour win32).
Tout d'abord, décompressez phplib. Il y a un répertoire "php" à l'intérieur. répertoire d'installation. Par exemple : Apache est installé dans le répertoire d:Apache, puis copiez le répertoire "php" dans d:Apache, et copiez les fichiers et répertoires du répertoire pages du répertoire phplib (hors répertoire lui-même) dans d : Sous Apachehtdocs.
La bibliothèque de classes phplib doit être initialisée en fonction du système, et le fichier local.inc devra peut-être être modifié, qui contient certains paramètres de base, qui peuvent être modifiés en fonction de la situation réelle de votre propre machine.
Modifiez le programme dans le fichier d:Apachephpprepend.php comme suit :
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/" //Le chemin vers le répertoire php sous phplib
}
Modifiez le fichier d:Apachephplocal.inc :
class DB_Example extends DB_Sql {
var $Host = "localhost"; //Le nom d'hôte de la base de données mysql var $Database = "test"; //Nom de la base de données var $User = "root"; //Nom d'utilisateur de la base de données var $Password = "1234567"; // Mot de passe de l'utilisateur de la base de données
}
Enfin, la table initiale est générée sur la base du fichier create_database.mysql dans le sous-répertoire stuff du répertoire phplib.
Puisque chaque page qui utilise phplib doit d'abord être capable de trouver les fichiers de bibliothèque de classes nécessaires pour exécuter phplib, nous pouvons définir la variable auto_prepend dans php.ini pour la prendre en charge. phplib contient un fichier prepend.php et spécifie auto_prepend comme "d: /. Apache/php/prepend.php" (avec guillemets), chaque page inclura automatiquement la bibliothèque de classes phplib. On peut également ajouter le répertoire où se trouve la bibliothèque de classes phplib à la variable include afin que ces fichiers puissent être trouvés. 2. Appelez la fonction page_open().
Dans chaque page utilisant phplib, vous devez d'abord appeler la fonction page_open pour l'initialisation, par exemple :
<?php
page_open(array("sess" => "Test_Session"));
?>
Les variables de tableau (sess) sont utilisées pour initialiser certains objets de sauvegarde d'état. Il convient de le noter ici : les noms intégrés de phplib (sess) doivent être utilisés. Ces noms intégrés sont définis dans local.inc.
Étant donné que phplib utilise des cookies pour enregistrer les informations d'état, la fonction page_open() doit être appelée avant que le contenu de la page ne soit envoyé au navigateur. Le script php doit se terminer par page_close(), qui réécrira les données d'état pertinentes dans la base de données, sinon les variables seront perdues.
3. Utilisation spécifique.
Après avoir enregistré une variable, vous pouvez l'utiliser dans les pages suivantes jusqu'à la fin de la session. Méthode :
<?php $sess->register( "varname"); ?>
Notez que varname ici n'est pas une valeur de variable, mais un nom de variable. Vous pouvez d'abord spécifier le nom de la variable, puis attribuer la valeur. Vous pouvez modifier la valeur d'une variable sur une certaine page, et la valeur modifiée sera obtenue lors de l'accès à la variable sur les pages suivantes. Les types de variables sont divers et peuvent être une chaîne, un nombre ou un tableau. Par exemple :
première page :
<?php
page_open(array("sess" => "Test _Session"));
$sess->register( "welcome"); //Enregistre la variable $welcome, notez qu'il n'est pas nécessaire d'ajouter $
$welcome="Bonjour le monde PHP !";
…
page_close();
?>
Deuxième page :
<?php
page_open();//Démarrer la session
echo $welcome;//Affichage $welcome défini dans la première page
page_close();//Enregistrer les informations d'état
?>
Après avoir enregistré une variable, lorsque la page appelle enfin la fonction page_close(), chaque variable de session sera réécrite dans la base de données. Si vous oubliez d'appeler la fonction page_close(), les variables ne seront pas réécrites dans la base de données, ce qui aura des conséquences imprévisibles. Lorsque la variable a été utilisée et n'est plus nécessaire, la fonction suivante peut être appelée pour supprimer la variable :
<?php
page_open(array("sess" => "Test _Session"));
…
$sess->unregister( "nom_variable");
…
page_close();
?>
Comment implémenter une session en version PHP4 ?
La session de PHP4 s'appuie également sur les cookies pour enregistrer les identifiants de session et utilise le système de fichiers pour enregistrer les variables (par défaut, ses variables de session ne peuvent pas enregistrer les objets). Bien entendu, la session peut également être enregistrée dans la base de données.
Il existe de nombreuses fonctions liées à la session dans php4 (voir l'article Configuration de php.ini pour plus de détails). Normalement, nous n'avons besoin d'appeler que trois fonctions : session_start(), session_register(), session_is_registered().
Appelez la fonction session_start() au début de chaque page nécessitant une session, par exemple :
<?session_start()?>
<html><corps>
<?
$bienvenue="Bonjour tout le monde !";
session_register("welcome");//Enregistrer la variable $welcome, notez qu'il n'y a pas de symbole $ if(session_is_registered("welcome"))//Vérifier si la variable $welcome est enregistrée echo "la variable de bienvenue a été enregistrée!";
autre
echo "La variable de bienvenue n'a pas encore été enregistrée !";
?>
</body></html>
Pour personnaliser le traitement de session dans php4,
nous devons développer 6 fonctions :
·sess_open($sess_path, $session_name);
Cette fonction est appelée par le gestionnaire de session pour l'initialisation.
Le paramètre $sess_path correspond à l'option session.save_path du fichier php.ini. Le paramètre $session_name correspond à l'option session.name du php.ini.
·sess_close();
Cette fonction est appelée lorsque la page termine l'exécution et que le gestionnaire de session doit être fermé.
·sess_read($key);
Cette fonction récupère et renvoie l'identifiant lorsque le gestionnaire de session lit la valeur de clé de session spécifiée ($key); ). Les données de session de $key. (Remarque : la sérialisation est une technologie qui enregistre des variables ou des objets dans un fichier à la fin du programme ou lorsque cela est nécessaire, puis les transfère dans la mémoire lorsque le programme s'exécute ou est nécessaire la prochaine fois. est différente de la méthode consistant à sauvegarder uniquement les données. )
·sess_write($key, $val);
Cette fonction est appelée lorsque le gestionnaire de session a besoin de sauvegarder les données, ce qui se produit souvent à la fin du programme. Il est chargé de sauvegarder les données dans un endroit où elles pourront être récupérées la prochaine fois à l'aide de la fonction sess_read ($ key).
·sess_destroy($key);
Cette fonction doit détruire la session. Il est chargé de supprimer la session et d’effacer l’environnement.
·sess_gc($maxlifetime);
Cette fonction est responsable du nettoyage des fragments. Dans ce cas, il se charge de supprimer les données de session obsolètes. Les gestionnaires de session les appellent de temps en temps.
Le programme personnalisé peut utiliser une base de données MySQL ou un fichier DBM pour enregistrer les données de session, en fonction de la situation spécifique. Si vous utilisez MySQL pour le support, vous devez effectuer les étapes suivantes :
Créez d'abord une base de données de sessions dans MySQL et créez une table de sessions :
mysql> CREATE DATABASE sessions ;
mysql>GRANT sélectionner, insérer, mettre à jour, supprimer les sessions ON.* À phpsession@localhost
-> IDENTIFIÉ PAR 'phpsession';
mysql> Sessions CREATE TABLE (
-> sesskey char(32) non nul,
-> expiration int(11) non signé non nul,
-> texte de valeur non nul,
-> CLÉ PRIMAIRE (sesskey)
-> );
Ensuite, modifiez les variables $SESS_DB* dans le fichier session_mysql.php pour qu'elles correspondent aux paramètres de la base de données sur votre machine :
<?
$SESS_DBHOST = "localhost"; /* Nom d'hôte de la base de données*/
$SESS_DBNAME = "sessions"; /* nom de la base de données*/
$SESS_DBUSER = "phpsession"; /* Nom d'utilisateur de la base de données*/
$SESS_DBPASS = "phpsession" /* Mot de passe de la base de données*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Fonction personnalisée
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Personnaliser l'interface lors de l'utilisation de fichiers DBM :
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Fonction personnalisée
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Code de test personnalisé de la session :
<?php
…
if ($handler == "dbm") include("session_dbm.php");//Quelle interface utiliser
elseif ($handler == "mysql") include("session_mysql.php");
sinon…
session_start();
session_register("compte");
…
?>
Comment utiliser Session en authentification ?
La session peut être utilisée pour l'authentification de l'utilisateur :
vérifiez si l'utilisateur est légitime :
<?
session_start();
……//Processus de vérification session_register("reguser");
?>
Vérifier si l'utilisateur est connecté sur une autre page
<?
session_start();
if(isset($reguser)&&$reguser!=""){//Si vous êtes connecté echo "Cher utilisateur, bienvenue";
}else{//Si vous n'êtes pas connecté echo "Veuillez vous inscrire d'abord !";
}
?>
L'utilisateur se déconnecte :
<?
session_destroy();
…
?>
Comment implémenter plusieurs sessions exécutées simultanément ?
Question : Lorsque j'écrivais un système d'achat, de vente et d'inventaire pour mon unité, j'ai découvert qu'il était nécessaire de permettre à plusieurs utilisateurs d'accéder simultanément à une application PHP. L'ID de session unique statique initialement conçu a provoqué une confusion dans les données. De cette manière, la génération dynamique d’un identifiant de session unique devient une priorité absolue.
La solution est simple : j'ai utilisé le nom du fichier php + l'horodatage comme identifiant de session unique, afin que chaque session de mon programme soit à sa place et qu'il n'y ait plus de confusion.
Je publierai mon code source ci-dessous afin que les amis qui ont le même problème puissent trouver une solution.
//Démarre une session PHP pour conserver les variables.
if (vide ($ mon nom de session)) {
$micro = microtime();
$micro = str_replace(" ","",$micro); // supprime les espaces
$micro = str_replace(".","",$micro); // supprime les points
$mysessionname = "po_maint" .
}
nom_session ($ mon nom de session);
session_start();
Notes sur le programme :
Utilisez mysessionname pour transmettre des variables pour le nom de session unique entre les pages. Si vous utilisez également ce nom, vous devez apporter une petite modification au programme ci-dessus. Mysessionname ne peut pas être le nom de variable interne de la session car il existe déjà avant le démarrage de la session. Mon nom de session ne peut pas être stocké en mode cookie, car plusieurs sessions écraseront définitivement le fichier cookie d'origine. Vous pouvez l'enregistrer en utilisant des champs de formulaire masqués. Il n'y aura alors aucun problème.