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数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
php强制更新图片缓存的方法
Feb 11 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
PHP查询分页的实现代码
Jun 09 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
PHP合并两个或多个数组的方法
Jan 20 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
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php生成html文件方法总结
2014/12/01 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php实现留言板功能
2017/03/05 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
python学生管理系统的实现
2020/04/05 Python
pytorch实现查看当前学习率
2020/06/24 Python
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
打架检讨书
2015/01/27 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
决心书格式及范文
2019/06/24 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
德生2P3收音机开箱评测
2022/04/30 无线电