Maison > php教程 > PHP开发 > Explication détaillée de l'utilisation de session en PHP Page 2/2

Explication détaillée de l'utilisation de session en PHP Page 2/2

高洛峰
Libérer: 2016-12-24 09:27:49
original
1338 Les gens l'ont consulté

Explication détaillée de la session en PHP 2

Résumé
La session fait référence à la période de 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 lorsque l'utilisateur parcourt le temps passé 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 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)

Décompressez d'abord phplib, il y a un répertoire "php" à l'intérieur. Copiez ce répertoire dans le répertoire d'installation d'Apache. 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 (à l'exclusion du répertoire lui-même) dans d:Apachehtdocs.

La bibliothèque de classes phplib doit être initialisée en fonction du système. Vous devrez peut-être modifier le fichier local.inc, qui contient quelques paramètres de base, qui peuvent être modifiés en fonction de la situation réelle de votre machine.

Modifiez le programme dans le fichier d:Apachephpprepend.php comme suit :

    if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { 
      $_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目录的路径 
    } 
  修改d:\Apache\php\local.inc文件: 
    class DB_Example extends DB_Sql { 
      var $Host = "localhost"; //mysql数据库所在主机名 
      var $Database = "test"; //数据库名 
      var $User = "root"; //数据库用户名 
      var $Password = "1234567"; //数据库用户密码 
    }
Copier après la connexion

Enfin, générez la table initiale basée sur le fichier create_database.mysql dans le sous-répertoire stuff sous phplib annuaire.
Puisque chaque page utilisant phplib doit d'abord 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 pour qu'elle contienne un fichier prepend.php et spécifier auto_prepend comme After "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")); 
  ?>
Copier après la connexion

Variable Array ( sess) est utilisé 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.
É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 le. 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" //); Enregistrez la variable $welcome, veuillez noter qu'il n'est pas nécessaire d'ajouter $
 $welcome="Bonjour le monde PHP!"
   ……
 page_close(); page_open();//Démarrer la session
 echo $welcome;//Afficher le $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 est 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( "variable_name"); 
    …… 
    page_close(); 
    ?>
Copier après la connexion

在PHP4版本中是如何实现session的? 

  php4的session也靠cookies保存session id,用文件系统保存变量(默认情况下),因此,它的session变量不能保存对象。当然也可以将session保存在数据库中。 
  在php4中有关session的函数很多(详见php.ini配置一文),通常情况下我们只需要调用三个函数即可:sesssion_start()、session_register()、session_is_registered()。 
  在需要用到session的每一页的最开始处调用session_start()函数, 例如: 
    <?session_start()?> 
    <html><body> 
    <? 
    $welcome="hello world !"; 
    session_register("welcome");//注册$welcome变量,注意没有$符号 
    if(session_is_registered("welcome"))//检查$welcome变量是否注册 
      echo "welcome变量已经注册了!"; 
    else 
      echo "welcome变量还没有注册!"; 
    ?> 
    </body></html> 
  php4中session处理的定制 
  我们需要扩充6个函数: 
    sess_open($sess_path, $session_name); 
    这个函数被session处理程序调用来作初始化工作。 
    参数$sess_path对应php.ini文件中的session.save_path选项 
    参数$session_name对应php.ini中的session.name 选项。 
    sess_close(); 
    这个函数在页面结束执行并且session处理程序需要关闭时被调用 
    sess_read($key); 
    这个函数在session处理程序读取指定session键值($key)时,检索并返回标识为$key的session数据.(注意:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于只保存数据的方法。) 
    sess_write($key, $val); 
    这个函数据在session处理程序需要将数据保存时调用,这种情况经常在程序结束时发生。它负责将数据保存在下次能用sess_read($key)函数检索的地方。 
    sess_destroy($key); 
    这个函数在需要消毁session时。它负责删除session并且清除环境。 
    sess_gc($maxlifetime); 
    这个函数负责清理碎片。在这种情况下,它负责删除过时的session数据。session处理程序会偶尔调用它们。 
  定制程序可以用mysql数据库或DBM文件保存session数据,视具体的情况而定。如果使用mysql作支持,那还需要进行以下的步骤: 
  首先在mysql中创建一个sessions数据库,并且创建一个sessions表: 
  mysql> CREATE DATABASE sessions; 
  mysql> GRANT select, insert, update, delete ON sessions.* TO phpsession@localhost 
    -> IDENTIFIED BY 'phpsession'; 
  mysql> CREATE TABLE sessions ( 
    -> sesskey char(32) not null, 
    -> expiry int(11) unsigned not null, 
    -> value text not null, 
    -> PRIMARY KEY (sesskey) 
    -> ); 
  下一步,修改session_mysql.php文件的$SESS_DB* 变量使其匹配你机器上的数据库设置: 
<? 
$SESS_DBHOST = "localhost"; /* 数据库主机名 */ 
$SESS_DBNAME = "sessions"; /* 数据库名 */ 
$SESS_DBUSER = "phpsession"; /* 数据库用户名 */ 
$SESS_DBPASS = "phpsession"; /* 数据库密码 */ 
$SESS_DBH = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 
……//定制函数 
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc"); 
?> 
  定制使用dbm文件时的接口 : 
<? 
$SESS_DBM = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 
……//定制函数 
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc"); 
?> 
  session定制的测试代码: 
<?php 
…… 
if ($handler == "dbm") include("session_dbm.php");//使用何种接口 
elseif ($handler == "mysql") include("session_mysql.php"); 
else …… 
session_start(); 
session_register("count");
......
?>
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érifiez si l'utilisateur est connecté sur une autre page
  <?        Déjà connecté
  echo "Cher utilisateur, bienvenue"
 }else{//Si vous n'êtes pas connecté
  echo "Veuillez d'abord vous inscrire!";
 }
  ?>
  Déconnexion de l'utilisateur :
 <
 session_destroy();
Question : Lorsque j'écrivais un système d'achat, de vente et d'inventaire pour mon unité, j'ai trouvé qu'il était nécessaire de permettre à plusieurs utilisateurs d'accéder à une application php en même temps. 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 et 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émarrez une session PHP pour conserver les variables.
if ( empty($mysessionname) ) {
$micro = microtime();
$micro = str_replace(" ","",$ micro); // supprime les espaces
  $micro = str_replace(".","",$micro); // supprime les points
  $mysessionname = "po_maint"
. }
session_name($mysessionname);
session_start();
Notes du programme :
Utilisez mysessionname pour transmettre des variables pour le nom de session unique entre les pages. programme Petits changements. 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.





Pour des explications plus détaillées sur la façon d'utiliser les sessions en PHP, veuillez faire attention au site Web PHP chinois pour les articles connexes à la page 2/2 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal