源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PHP将session信息存储到数据库的类实例

  • 时间:2020-05-21 05:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP将session信息存储到数据库的类实例
本文实例讲述了PHP将session信息存储到数据库的类。分享给大家供大家参考。具体分析如下: SessionHandlerInterface接口是PHP内置的接口,直接实现就行了 具体可以看php手册关于session_set_save_handler函数的解释! PHP代码如下:
[u]复制代码[/u] 代码如下:
/** * 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程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部