Heim  >  Artikel  >  php教程  >  Ausführliche Erklärung zur Verwendung einer Sitzung in PHP Seite 2/2

Ausführliche Erklärung zur Verwendung einer Sitzung in PHP Seite 2/2

高洛峰
高洛峰Original
2016-12-24 09:27:491323Durchsuche

Detaillierte Erklärung der Sitzung in PHP 2

Zusammenfassung
Sitzung bezieht sich auf den Zeitraum, der vom Betreten der Website bis zum Schließen des Browsers vergeht, wenn der Benutzer eine Website durchsucht, d Durchsucht die Website verbrachte Zeit. 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 einfach 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 dies nur mit anderen Methoden erreichen, von denen die bekannteste phplib ist. 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. Zuerst phplib installieren (die Umgebung ist win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 für win32)

Zuerst phplib entpacken, es gibt ein „php " Verzeichnis, kopieren Sie dieses Verzeichnis in das Apache-Installationsverzeichnis. Beispiel: Apache wird im Verzeichnis d:Apache installiert, dann kopieren Sie das Verzeichnis „php“ nach d:Apache und kopieren die Dateien und Verzeichnisse im Seitenverzeichnis des Verzeichnisses phplib (mit Ausnahme des Verzeichnisses selbst) nach d:Apachehtdocs.

Die phplib-Klassenbibliothek muss entsprechend dem System initialisiert werden. Möglicherweise müssen Sie die Datei local.inc ändern, die einige grundlegende Parameter enthält, die entsprechend der tatsächlichen Situation Ihres 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/"; //放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"; //数据库用户密码 
    }

Generieren Sie abschließend die Anfangstabelle basierend auf der Datei create_database.mysql im Unterverzeichnis stuff unter der phplib Verzeichnis.
Da jede Seite, die phplib verwendet, zuerst die zum Ausführen von phplib erforderlichen Klassenbibliotheksdateien finden muss, können wir die Variable auto_prepend in php.ini so einstellen, dass sie eine prepend.php-Datei enthält, und auto_prepend als Nach „d:/“ angeben. 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 die Funktion page_open() auf

Auf jeder Seite, die phplib verwendet, müssen Sie zuerst die Funktion page_open zur Initialisierung aufrufen, zum Beispiel:

  <?php 
  page_open(array("sess" => "Test_Session")); 
  ?>

Array-Variable (sess) wird verwendet, um einige zustandsspeichernde Objekte zu initialisieren. 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 ihn dann zuweisen Wert. 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"); Registrieren Sie die Variable $welcome. Bitte beachten Sie, dass das Hinzufügen von $
 $welcome="
   ……
 page_close();
 <?php
nicht erforderlich ist page_open();//Sitzung starten
 echo $welcome;//Anzeige des auf der ersten Seite definierten $welcome
 page_close();//Statusinformationen speichern
?>
Nach der Registrierung einer Variablen Wenn die Seite schließlich die Funktion page_close() aufruft, wird jede Sitzungsvariable in die Datenbank zurückgeschrieben. 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 wird 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( "variable_name"); 
    …… 
    page_close(); 
    ?>

在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");
......
?>
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(); Bereits angemeldet
  echo „Sehr geehrter Benutzer, willkommen“ >  echo „Bitte registrieren Sie sich zuerst!“;
 }
  ?>
  Benutzer abmelden:
 <?
 session_destroy();
Frage: Als ich ein Einkaufs-, Verkaufs- und Lagersystem für meine Einheit schrieb, stellte ich fest, dass es notwendig war, mehreren Benutzern die gleichzeitige Eingabe einer 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 unten meinen Quellcode 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
}
session_name($mysessionname);
session_start();
Verwenden Sie mysessionname, um Variablen für den eindeutigen Sitzungsnamen zwischen Seiten zu übergeben Programm Kleine Änderungen. 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.





Ausführlichere Erklärungen zur Verwendung von Sitzungen in PHP finden Sie auf der chinesischen PHP-Website für verwandte Artikel auf Seite 2/2!

Stellungnahme:
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