《PHP編程:PHP將session信息存儲到數據庫的類實例》要點:
本文介紹了PHP編程:PHP將session信息存儲到數據庫的類實例,希望對您有用。如果有疑問,可以聯系我們。
PHP學習本文實例講述了PHP將session信息存儲到數據庫的類.分享給大家供大家參考.具體分析如下:
PHP學習SessionHandlerInterface接口是PHP內置的接口,直接實現就行了
具體可以看php手冊關于session_set_save_handler函數的解釋!
PHP學習PHP代碼如下:
代碼如下:
/**
* session信息存儲到數據庫的類
* 表結構:
* CREATE TABLE IF NOT EXISTS `sessioninfo` (
*? `sid` varchar(255) NOT NULL,
*? `value` text NOT NULL,
*? `expiration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
*? PRIMARY KEY (`sid`)
* ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
class MySessionHandler implements SessionHandlerInterface {
??? /**
??? * @access private
??? * @var object 數據庫連接
??? */
??? private $_dbLink;
??? /**
??? * @access private
??? * @var string 保存session的表名
??? */
??? Private $_sessionTable;
??? /**
??? * @access private
??? * @var string session名
??? */
??? private $_sessionName;
??? /**
??? * @const 過期時間
??? */
??? const SESSION_EXPIRE = 10;
??? public function __construct($dbLink, $sessionTable) {
??????? if(!is_object($dbLink)) {
??????????? return false;
??????? }
??????? $this->_dbLink = $dbLink;
??????? $this->_sessionTable = $sessionTable;
??? }
??? /**
??? * 打開
??? * @access public
??? * @param string $session_save_path 保存session的路徑
??? * @param string $session_name session名
??? * @return integer
??? */
??? public function open($session_save_path, $session_name) {
??????? $this->_sessionName = $session_name;
??????? return 0;
??? }
??? /**
??? * 關閉
??? * @access public
??? * @return integer
??? */
??? public function close() {
??????? return 0;
??? }
??? /**
??? * 關閉session
??? * @access public
??? * @param string $session_id session ID
??? * @return string
??? */
??? public function read($session_id) {
??????? $query = "SELECT value FROM {$this->_sessionTable} WHERE sid = {$session_id} AND UNIX_TIMESTAMP(expiration) + " . self::SESSION_EXPIRE . " > UNIX_TIMESTAMP(NOW())";
??????? $result = $this->_dbLink->query($query);
??????? if(!isset($value) || empty($value)) {
??????????? $value = "";
??????????? return $value;
??????? }
??????? $this->_dbLink->query("UPDATE {$this->_sessionTable} SET expiration = CURRENT_TIMESTAMP() WHERE sid = {$session_id}");
??????? $value = $result->fetch_array();
??????? $result->free();
??????? return $value['value'];
??? }
??? /**
??? * 寫入session
??? * @access public
??? * @param string $session_id session ID
??? * @param string $session_data session data
??? * @return integer
??? */
??? public function write($session_id, $session_data) {
??????? $query = "SELECT value FROM {$this->_sessionTable} WHERE sid = '{$session_id}' AND UNIX_TIMESTAMP(expiration) + " . self::SESSION_EXPIRE . " > UNIX_TIMESTAMP(NOW())";
??????? $result = $this->_dbLink->query($query);
??????? $result = $result->fetch_array();
??????? if(!empty($result)) {
??????????? $result = $this->_dbLink->query("UPDATE {$this->_sessionTable} SET value = {$session_data} WHERE sid = {$session_id}");
??????? }
??????? else{
??????????? $result = $this->_dbLink->query("INSERT INTO {$this->_sessionTable} (sid, value) VALUES ('{$session_id}', '{$session_data}')");
??????? }
??????? if($result){
??????????? return 0;
??????? }
??????? else{
??????????? return 1;
??????? }??????
??? }
??? /**
??? * 銷魂session
??? * @access public
??? * @param string $session_id session ID
??? * @return integer
??? */
??? public function destroy($session_id) {
??????? $result = $this->_dbLink->query("DELETE FROM {$this->_sessionTable} WHERE sid = '{$session_id}'");
??????? if($result){
??????????? return 0;
??????? }
??????? else{
??????????? return 1;
??????? }
??? }
??? /**
??? * 垃圾回收
??? * @access public
??? * @param string $maxlifetime session 最長生存時間
??? * @return integer
??? */
??? public function gc($maxlifetime) {
??????? $result = $this->_dbLink->query("DELETE FROM {$this->_sessionTable} WHERE UNIX_TIMESTAMP(expiration) < UNIX_TIMESTAMP(NOW()) - " . self::SESSION_EXPIRE);
??????? if($result){
??????????? return 0;
??????? }
??????? else{
??????????? return 1;
??????? }
??? }
}
$dbLink = new mysqli("localhost", "root", "root", "test");
$sessionTable = "sessioninfo";
$handler = new MySessionHandler($dbLink, $sessionTable);
session_set_save_handler($handler);
session_start();
$_SESSION['name'] = "test";
echo $_SESSION["name"];
//session_destroy();
PHP學習希望本文所述對大家的php程序設計有所贊助.
歡迎參與《PHP編程:PHP將session信息存儲到數據庫的類實例》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/11885.html