PHP封装的数据库保存session功能类


Posted in PHP onJuly 11, 2016

本文实例讲述了PHP封装的数据库保存session功能类。分享给大家供大家参考,具体如下:

PHP用数据库保存session类:

<?php
class SafeSessionHandler implements SessionHandlerInterface {
  public $save_path;
  public $session_name;
  public $table;
  public function __construct() {
    $this->table = new Table("safe_session");
  }
  private function session_id_parse($session_id) {
    $time = hexdec(substr($session_id, 0, 8));
    $skey = substr($session_id, 8);
    return array($time, $skey);
  }
  public function close() {
    loginfo("close: ");
    return true;
  }
  public function create_sid() {
    loginfo("create_sid: ");
    $time = time();
    $skey = "";
    $char = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for ($i=0; $i<52; $i++) {
      $skey .= $char{mt_rand(0, 61)};
    }
    $session = array(
      "time" => $time,
      "skey" => $skey,
      "sval" => "",
    );
    $this->table->insert($session);
    return dechex($time) . $skey;
  }
  public function destroy($session_id) {
    loginfo("destroy: %s", $session_id);
    list($time, $skey) = $this->session_id_parse($session_id);
    $this->table->where("time = ?", $time)->where("skey = ?", $skey)->delete();
    return true;
  }
  public function gc($maxlifetime) {
    loginfo("gc: %s", $maxlifetime);
    $this->table->where("time < ?", time() - 86400 * 30)->delete();
    return true;
  }
  public function open($save_path, $session_name) {
    loginfo("open: %s, %s", $save_path, $session_name);
    $this->save_path = $save_path;
    $this->session_name = $session_name;
    return true;
  }
  public function read($session_id) {
    loginfo("read: %s", $session_id);
    list($time, $skey) = $this->session_id_parse($session_id);
    $row = $this->table->where("time = ?", $time)->where("skey = ?", $skey)->select()->fetch();
    if (empty($row)) {
      return "";
    }
    return $row["sval"];
  }
  public function write($session_id, $session_data) {
    loginfo("write: %s, %s", $session_id, $session_data);
    $session = array("sval" => $session_data,);
    list($time, $skey) = $this->session_id_parse($session_id);
    $this->table->where("time = ?", $time)->where("skey = ?", $skey)->update($session);
    return true;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
mysql 全文搜索 技巧
Apr 27 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
php二分查找二种实现示例
Mar 12 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
destoon整合UCenter图文教程
Jun 21 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
PHP动态柱状图实现方法
Mar 30 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
php用户登录之cookie信息安全分析
May 13 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
php中array_column函数简单实现方法
Jul 11 #PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 #PHP
php进行ip地址掩码运算处理的方法
Jul 11 #PHP
php解析xml 的四种简单方法(附实例)
Jul 11 #PHP
php进程间通讯实例分析
Jul 11 #PHP
Adnroid 微信内置浏览器清除缓存
Jul 11 #PHP
php通过两层过滤获取留言内容的方法
Jul 11 #PHP
You might like
PHP 存储文本换行实现方法
2010/01/05 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
PHP时间类完整代码实例
2021/02/26 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
iis6+javascript Add an Extension File
2007/06/13 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python实现调度算法代码详解
2017/12/01 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
社区灵活就业证明
2014/11/03 职场文书
电工实训报告总结
2014/11/05 职场文书
银行培训心得体会范文
2016/01/09 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js