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 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
php zlib压缩和解压缩swf文件的代码
Dec 30 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
自制PHP框架之模型与数据库
May 07 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
php优化查询foreach代码实例讲解
Mar 24 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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 file_get_contents函数轻松采集html数据
2010/04/22 PHP
php url路由入门实例
2014/04/23 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
使用python turtle画高达
2020/01/19 Python
使用npy转image图像并保存的实例
2020/07/01 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
2014年效能监察工作总结
2014/11/21 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
胡桃夹子观后感
2015/06/11 职场文书