PHP编程:PHP将session信息存储到数据库的类实例
发布时间:2020-12-13 02:26:48 所属栏目:PHP教程 来源:网络整理
导读:《PHP将session信息存储到数据库的类实例》要点: 本文介绍了PHP将session信息存储到数据库的类实例,希望对您有用。如果有疑问,可以联系我们。 PHP学习 本篇章节讲解PHP将session信息存储到数据库的类.供大家参考研究.具体分析如下: SessionHandl
《PHP将session信息存储到数据库的类实例》要点: PHP学习本篇章节讲解PHP将session信息存储到数据库的类.分享给大家供大家参考.具体分析如下: SessionHandlerInterface接口是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","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将session信息存储到数据库的类实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |