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 结果集的分页实现代码
Mar 10 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
php文件操作实例代码
May 10 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
discuz目录文件资料汇总
Dec 30 PHP
php安装swoole扩展的方法
Mar 19 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
php变量与字符串的增删改查操作示例
May 07 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
PHP循环获取GET和POST值的代码
2008/04/09 PHP
php简单日历函数
2015/10/28 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
vue绑定class的三种方法
2020/12/24 Vue.js
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python最长公共子串算法实例
2015/03/07 Python
selenium+python环境配置教程详解
2019/05/28 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
C语言笔试集
2012/07/24 面试题
酒店员工职业生涯规划
2014/02/25 职场文书
电工技术比武方案
2014/05/11 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
销售员岗位职责
2015/02/10 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL