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 相关文章推荐
PHP中的加密功能
Oct 09 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
php生成短域名函数
Mar 23 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
如何利用Python写个坦克大战
2020/11/18 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
零件设计自荐信范文
2013/11/27 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
数学教学随笔感言
2014/02/17 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang