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

本文实例讲述了PHP将session信息存储到数据库的类。分享给大家供大家参考。具体分析如下:

SessionHandlerInterface接口是PHP内置的接口,直接实现就行了
具体可以看php手册关于session_set_save_handler函数的解释!

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程序设计有所帮助。

时间: 2024-12-01 08:20:40

PHP将session信息存储到数据库的类实例_php技巧的相关文章

php面象对象数据库操作类实例_php技巧

本文实例讲述了php面象对象数据库操作类.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: //此处构造一个数据库操作类,封装所有数据库操作 //可以扩展便于后台管理程序的使用 Class MySQLDB  {     var $host;     var $user;     var $passwd;     var $database;    var $conn;       //利用构造函数实现变量初始化     //同时连接数据库操作    function MySQLD

php基于session实现数据库交互的类实例_php技巧

本文实例讲述了php基于session实现数据库交互的类.分享给大家供大家参考.具体如下: <?php /** * session 数据库存储类 */ class Session { private static $session_id = 0; private static $session_data = array(); private static $is_update = FALSE; private static $is_del = FALSE; private static $is_

php实现MySQL数据库备份与还原类实例_php技巧

本文实例讲述了php实现MySQL数据库备份与还原类.分享给大家供大家参考.具体分析如下: 这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子,代码如下: 复制代码 代码如下: <?php   /**   * 创建时间: 2012年5月21日   *   * 说明:分卷文件是以_v1.sql为结尾(20120522021241_all_v1.sql)   * 功能:实现mysql数据库分卷备份,选

简单实用的网站PHP缓存类实例_php技巧

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度.目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率.本文以一个简单实用的缓存类为例,帮助大家参考下缓存的机制与写法. 缓存文件cache.php代码如下: <?php /* 用户需要事先定义的常量: _CachePath_ 模板缓存路径 _CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 _ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,

php的mssql数据库连接类实例_php技巧

本文实例讲述了php的mssql数据库连接类实例代码,分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: class DB_Sql {   var $Host     = "";   var $Database = "";   var $User     = "";   var $Password = "";   var $Link_ID  = 0;   var $Query_ID = 0;   var $Rec

php将图片保存为不同尺寸图片的图片类实例_php技巧

本文实例讲述了php将图片保存为不同规格的图片类.分享给大家供大家参考.具体如下: 图片处理类.imagecls.php如下: <?php /** 图片处理类 */ class imagecls { /** * 文件信息 */ var $file = array(); /** * 保存目录 */ var $dir = ''; /** * 错误代码 */ var $error_code = 0; /** * 文件上传最大KB */ var $max_size = -1; function es_i

PHP生成RSS文件类实例_php技巧

本文实例讲述了PHP生成RSS文件类文件.分享给大家供大家参考.具体如下: PHP RSS 生成类实例代码如下: 复制代码 代码如下: <?php if (defined('_class_rss_php')) return; define('_class_rss_php教程',1); /**    *  使用说明:  *  $rss = new rss('redfox','http://jb51.net/',"redfox's blog");  *  $rss->addit

php实现用于计算执行时间的类实例_php技巧

本文实例讲述了php实现用于计算执行时间的类.分享给大家供大家参考.具体如下: 有了这个php类,计算函数或者一段代码的执行时间就简单了 <?php class c_Timer { var $t_start = 0; var $t_stop = 0; var $t_elapsed = 0; function start() { $this->t_start = microtime(); } function stop() { $this->t_stop = microtime(); }

封装一个PDO数据库操作类代码_php技巧

复制代码 代码如下: <?php /** * 数据库PDO操作 */ class MysqlPdo { public static $PDOStatement = null; /** * 数据库的连接参数配置 * @var array * @access public */ public static $config = array(); /** * 是否使用永久连接 * @var bool * @access public */ public static $pconnect = false;