php基于redis处理session的方法
来源: 阅读:712 次 日期:2016-07-20 15:18:42
温馨提示: 小编为您整理了“php基于redis处理session的方法”,方便广大网友查阅!

这篇文章主要介绍了php基于redis处理session的方法的相关资料,需要的朋友可以参考下

一个基于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函数。

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

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map