当前位置: 移动技术网 > IT编程>开发语言>PHP > PHP将session信息存储到数据库的类实例

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

2018年07月02日  | 移动技术网IT编程  | 我要评论
本文实例讲述了php将session信息存储到数据库的类。分享给大家供大家参考。具体分析如下: sessionhandlerinterface接口是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程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网