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 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
php使用GeoIP库实例
Jun 27 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php实现的mongodb操作类实例
Apr 03 PHP
PHP CURL使用详解
Mar 21 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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判断用户登录用户权限(超简单)
2013/06/08 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
新品发布会策划方案
2014/06/08 职场文书
预备党员半年考察意见
2015/06/01 职场文书