Heim  >  Artikel  >  Backend-Entwicklung  >  Wie man Sitzung und Datenbank in PHP betreibt

Wie man Sitzung und Datenbank in PHP betreibt

墨辰丷
墨辰丷Original
2018-06-09 11:45:421895Durchsuche

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 &#39;".$data_name."&#39;"; // 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 &#39;&#39;, 
`SessionArray` blob NOT NULL, 
`SessionExpTime` int(20) unsigned NOT NULL default &#39;0&#39;, 
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(&#39;user&#39;);
  session_set_save_handler( 
  array(&$this, &#39;sess_open&#39;), 
  array(&$this, &#39;sess_close&#39;), 
  array(&$this, &#39;sess_read&#39;), 
  array(&$this, &#39;sess_write&#39;), 
  array(&$this, &#39;sess_destroy&#39;), 
  array(&$this, &#39;sess_gc&#39;) 
  );
  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&#39;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 = &#39;".$SessionKey."&#39; 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 (&#39;".$SessionKey."&#39;,&#39;".$SessionExpTime."&#39;,&#39;".$SessionArray."&#39;)"; 
  $Result = mysql_query($Query, $this->DB_SELECT_DB); 
  if (!$Result){ 
      $Query = "UPDATE sessions SET SessionExpTime = &#39;".$SessionExpTime."&#39;, SessionArray = &#39;".$SessionArray."&#39; WHERE SessionKey = &#39;".$SessionKey."&#39; AND  SessionExpTime > " . time(); 
      $Result = mysql_query($Query, $this->DB_SELECT_DB); 
  }  
  return $Result; 
} 
function sess_destroy($SessionKey) { 
  $Query = "DELETE FROM sessions WHERE SessionKey = &#39;".$SessionKey."&#39;"; 
  $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!

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