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


Posted in PHP onMarch 04, 2015

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
PHP分页显示制作详细讲解
Oct 09 PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP SPL标准库之接口(Interface)详解
May 11 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php微信支付之APP支付方法
Mar 04 #PHP
php支付宝手机网页支付类实例
Mar 04 #PHP
php银联网页支付实现方法
Mar 04 #PHP
php随机抽奖实例分析
Mar 04 #PHP
php二维数组合并及去重复的方法
Mar 04 #PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 #PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 #PHP
You might like
PHP安装攻略:常见问题解答(二)
2006/10/09 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
python字典序问题实例
2014/09/26 Python
python看某个模块的版本方法
2018/10/16 Python
Python3最长回文子串算法示例
2019/03/04 Python
详解python深浅拷贝区别
2019/06/24 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
Python创建数字列表的示例
2019/11/28 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
成人教育自我鉴定
2013/11/01 职场文书
大学四年个人总结
2015/03/03 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
jquery插件实现搜索历史
2021/04/24 jQuery