《PHP編程:PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類(lèi)實(shí)例》要點(diǎn):
本文介紹了PHP編程:PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類(lèi)實(shí)例,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP學(xué)習(xí)本文實(shí)例講述了PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類(lèi).分享給大家供大家參考.具體分析如下:
PHP學(xué)習(xí)SessionHandlerInterface接口是PHP內(nèi)置的接口,直接實(shí)現(xiàn)就行了
具體可以看php手冊(cè)關(guān)于session_set_save_handler函數(shù)的解釋!
PHP學(xué)習(xí)PHP代碼如下:
代碼如下:
/**
* session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類(lèi)
* 表結(jié)構(gòu):
* 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 數(shù)據(jù)庫(kù)連接
??? */
??? private $_dbLink;
??? /**
??? * @access private
??? * @var string 保存session的表名
??? */
??? Private $_sessionTable;
??? /**
??? * @access private
??? * @var string session名
??? */
??? private $_sessionName;
??? /**
??? * @const 過(guò)期時(shí)間
??? */
??? const SESSION_EXPIRE = 10;
??? public function __construct($dbLink, $sessionTable) {
??????? if(!is_object($dbLink)) {
??????????? return false;
??????? }
??????? $this->_dbLink = $dbLink;
??????? $this->_sessionTable = $sessionTable;
??? }
??? /**
??? * 打開(kāi)
??? * @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;
??? }
??? /**
??? * 關(guān)閉
??? * @access public
??? * @return integer
??? */
??? public function close() {
??????? return 0;
??? }
??? /**
??? * 關(guān)閉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'];
??? }
??? /**
??? * 寫(xiě)入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;
??????? }??????
??? }
??? /**
??? * 銷(xiāo)魂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 最長(zhǎng)生存時(shí)間
??? * @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學(xué)習(xí)希望本文所述對(duì)大家的php程序設(shè)計(jì)有所贊助.
歡迎參與《PHP編程:PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類(lèi)實(shí)例》討論,分享您的想法,維易PHP學(xué)院為您提供專(zhuān)業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/11885.html