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 相关文章推荐
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
PHP无限分类(树形类)
Sep 28 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP dirname功能及原理实例解析
Oct 28 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简单的上传类分享
2016/05/15 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
nodejs中实现sleep功能实例
2015/03/24 NodeJs
javascript实现继承的简单实例
2015/07/26 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python 读写文件的操作代码
2018/09/20 Python
Python 控制终端输出文字的实例
2019/07/12 Python
基于python实现把图片转换成素描
2019/11/13 Python
在python中做正态性检验示例
2019/12/09 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
毕业生求职自荐信怎么写
2014/01/08 职场文书
组织鉴定材料
2014/06/02 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
初三毕业评语
2014/12/26 职场文书
放射科岗位职责
2015/02/14 职场文书
母亲节主题班会
2015/08/14 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS