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 采集获取指定网址的内容
Jan 05 PHP
PHP Memcached应用实现代码
Feb 08 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
eclipse php wamp配置教程
Jun 30 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
mac上配置Android环境变量的方法
2018/07/08 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
python实现网站微信登录的示例代码
2019/09/18 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
如何写出好的Java代码
2014/04/25 面试题
网页设计个人找工作求职信
2013/11/28 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
城管个人总结
2015/02/28 职场文书
校园广播站开场白
2015/06/01 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
PyTorch的Debug指南
2021/05/07 Python