php基于redis处理session的方法


Posted in Javascript onMarch 14, 2016

一个基于redis的处理session的方法,如下。

<?php
class Session_custom {
  private $redis; // redis实例
  private $prefix = 'sess_'; // session_id前缀
  
  // 会话开始时,会执行该方法,连接redis服务器
  public function open($path, $name) {
    $this->redis = new Redis();
    return $this->redis->connect("127.0.0.1",6379);
  }
  
  // 会话结束时,调用该方法,关闭redis连接
  public function close() {
    $this->redis->close();
    return true;
  }
  
  // 会话保存数据时调用该方法,在脚本执行完或session_write_close方法调用之后调用
  public function write($session_id, $data) {
    return $this->redis->hMSet($this->prefix.$session_id, array('expires' => time(), 'data' => $data));
  }
  
  // 在自动开始会话或者通过调用 session_start() 函数手动开始会话之后,PHP 内部调用 read 回调函数来获取会话数据。
  public function read($session_id) {
    if($this->redis->exists($this->prefix.$session_id)) {
      return $this->redis->hGet($this->prefix.$session_id, 'data');
    }
    return '';
  }
  
  // 清除会话中的数据,当调用session_destroy()函数,或者调用 session_regenerate_id()函数并且设置 destroy 参数为 TRUE 时,会调用此回调函数。
  public function destroy($session_id) {
    if($this->redis->exists($this->prefix.$session_id)) {
      return $this->redis->del($this->prefix.$session_id) > 0 ? true : false;
    }
    return true;
  }
  
  // 垃圾回收函数,调用周期由 session.gc_probability 和 session.gc_divisor 参数控制
  public function gc($maxlifetime) {
    $allKeys = $this->redis->keys("{$this->prefix}*");
    foreach($allKeys as $key) {
      if($this->redis->exists($key) && $this->redis->hGet($key, 'expires') + $maxlifetime < time()) {
        $this->redis->del($key);
      }
    }
    return true;
  }
}

// 调用自定义的session处理方法
$handler = new Session_custom();
session_set_save_handler(
  array($handler, 'open'),
  array($handler, 'close'),
  array($handler, 'read'),
  array($handler, 'write'),
  array($handler, 'destroy'),
  array($handler, 'gc')
);

// 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为,表示当脚本执行之后或调用exit()之后,存储当前会话数据并关闭当前会话
register_shutdown_function('session_write_close');

session_start();

// 可以使用session了

补充:

php.ini文件中的session.gc_probability与session.gc_divisor两个配置选项共同决定gc函数调用的时机。默认值分为为1和1000,表示每个请求只有1/1000的机会调用gc函数。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
javascript-简单的计算器实现步骤分解(附图)
May 30 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
深入理解JavaScript中的箭头函数
Jul 28 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
JS扩展类,克隆对象与混合类实例分析
Nov 26 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
深入浅析vue全局环境变量和模式
Apr 28 Javascript
使用javascript插入样式
Mar 14 #Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 #Javascript
javascript实现数组去重的多种方法
Mar 14 #Javascript
javascript实现PC网页里的拖拽效果
Mar 14 #Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 #Javascript
node模块机制与异步处理详解
Mar 13 #Javascript
JS中创建函数的三种方式及区别
Mar 13 #Javascript
You might like
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP7新增函数
2021/03/09 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
Node.js事件驱动
2015/06/18 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
微信小程序表单弹窗实例
2018/07/19 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
电大自我鉴定范文
2013/10/01 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
拉拉队口号
2014/06/16 职场文书
采购员岗位职责
2015/02/03 职场文书
售票员岗位职责
2015/02/15 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python