Heim >Backend-Entwicklung >PHP-Tutorial >Wie man Sitzung und Datenbank in PHP betreibt
In diesem Artikel wird hauptsächlich die Methode zum Betreiben von Sitzungen und Datenbanken in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
Das Beispiel in diesem Artikel beschreibt, wie PHP MySQL zum Speichern von Sitzungen verwendet. Die spezifische Analyse lautet wie folgt:
Diese Funktion ist in vielen großen Systemen allgemein verfügbar, muss jedoch getrennt werden analysiert, und die Informationen im Internet sind verfügbar. Es gibt nicht allzu viele. Hier habe ich einen Artikel zusammengestellt, den ich mit Ihnen teilen möchte
Die Verwendung von MySQL zum Speichern von Sitzungen hat viele Vorteile gegenüber Dateien:
1) Dies ist für verteilte Systeme von Vorteil, da Dateien nur auf einem Computer gespeichert werden können.
2) Dies ist für Systeme mit großem Zugriffsvolumen von Vorteil. Bei der Verwendung von Dateien wird jede Sitzung in einer Datei gespeichert wird es schwierig sein, die Sitzungsdatei zu finden.
Um MySQL zum Speichern einer Sitzung zu verwenden, müssen Sie zunächst eine Sitzungstabelle erstellen:
<?php $hostname_login = "localhost"; // Server address $username_login = "root"; // User name $password_login = ""; // Password // $data_name = "session"; // Database name $login = mysql_pconnect($hostname_login, $username_login, $password_login) or trigger_error(mysql_error(),E_USER_ERROR); $sql="SHOW DATABASES LIKE '".$data_name."'"; // If it is exist if($rs_table=mysql_query($sql,$login)) { if($rs_value=mysql_fetch_array($rs_table)) { echo "数据库已经存在!\n!"; exit(); } } $sql="CREATE DATABASE $data_name"; mysql_query($sql); // Crate database echo "数据库创建成功!\n"; mysql_select_db($data_name, $login); $sql="CREATE TABLE `sessions` ( `SessionKey` varchar(32) NOT NULL default '', `SessionArray` blob NOT NULL, `SessionExpTime` int(20) unsigned NOT NULL default '0', PRIMARY KEY (`SessionKey`), KEY `SessionKey` (`SessionKey`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; //新建数据库 sql语句 mysql_query($sql); echo "成功新建数据库表!"; ?>
MysqlSession-Klasse lautet wie folgt:
<?php class MysqlSession { // 注意在有使用Session的页面。页面一定要顶格,页面开始处不能留空。 private $DB_SERVER = "localhost"; // 数据库服务器主机名 private $DB_NAME = ""; // 数据库名字 private $DB_USER = "root"; // MYSQL 数据库访问用户名 private $DB_PASS = ""; // MYSQL 数据库访问密码 private $DB_SELECT_DB = ""; //private $SESS_LIFE = 1440; // Session的最大使用时长,单位秒。 private $SESS_LIFE = 0; function MysqlSession (&$sessionDB) { //session_write_close(); $this->DB_NAME = &$sessionDB; $this->SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); session_module_name('user'); session_set_save_handler( array(&$this, 'sess_open'), array(&$this, 'sess_close'), array(&$this, 'sess_read'), array(&$this, 'sess_write'), array(&$this, 'sess_destroy'), array(&$this, 'sess_gc') ); session_start(); } function sess_open($save_path, $session_name){ // 打开数据库连接 if (! $this->DB_SELECT_DB = mysql_pconnect($this->DB_SERVER, $this->DB_USER, $this->DB_PASS)) { echo "SORRY! MYSQL ERROR : Can't connect to $this->DB_SERVER as $DB_USER"; echo "MySQL Error: ", mysql_error(); die; } if (! mysql_select_db($this->DB_NAME, $this->DB_SELECT_DB)) { echo "SORRY! MYSQL ERROR : Unable to select database $this->DB_NAME"; die; } return true; } function sess_close() { return true; } function sess_read($SessionKey){ $Query = "SELECT SessionArray FROM sessions WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time(); // 过期不读取。 $Result = mysql_query($Query, $this->DB_SELECT_DB); if (list($SessionArray) = mysql_fetch_row($Result)) { return $SessionArray; } return false; } function sess_write($SessionKey, $VArray) { $SessionExpTime = time() + $this->SESS_LIFE; // 更新Session过期时间,Session过期时间 = 最后一次更新时间 + Session的最大使用时长 $SessionArray = addslashes($VArray); $Query = "INSERT INTO sessions (SessionKey,SessionExpTime,SessionArray) VALUES ('".$SessionKey."','".$SessionExpTime."','".$SessionArray."')"; $Result = mysql_query($Query, $this->DB_SELECT_DB); if (!$Result){ $Query = "UPDATE sessions SET SessionExpTime = '".$SessionExpTime."', SessionArray = '".$SessionArray."' WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time(); $Result = mysql_query($Query, $this->DB_SELECT_DB); } return $Result; } function sess_destroy($SessionKey) { $Query = "DELETE FROM sessions WHERE SessionKey = '".$SessionKey."'"; $Result = mysql_query($Query, $this->DB_SELECT_DB); return $Result; } function sess_gc($maxlifetime) { // 这个垃圾清除器系统调用。默认是1440秒清除一次。 //参数可以在PHP.ini里面设置。 $Query = "DELETE FROM sessions WHERE SessionExpTime < " . time(); $Result = mysql_query($Query, $this->DB_SELECT_DB); return mysql_affected_rows($this->DB_SELECT_DB); } } ?>
Verwendung: Wo session_start ursprünglich verwendet wurde, Ersetzen Sie es durch $session = new MysqlSession ()
Hinweis: Die Datenbank muss vor dem Einbinden dieses Programms geöffnet werden. Die Datenbank kann nicht geschlossen werden, bevor das Hauptprogramm beendet wird, da sonst ein Fehler auftritt.
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.
Verwandte Empfehlungen:
PHP+Mysql+jQuery zur Implementierung der Funktion zum Abrufen von Passwörtern
PHP zur Implementierung des Ladens Schriftart und Speichern
PHP implementiert den Bestätigungscode für chinesische Schriftzeichen
Das obige ist der detaillierte Inhalt vonWie man Sitzung und Datenbank in PHP betreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!