www.qjdy.com-奇迹赌场 > 佳美特设计 > 一个基于redis的处理session的方法

原标题:一个基于redis的处理session的方法

浏览次数:140 时间:2019-07-12

贰个基于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和一千,表示各个央浼独有1/1000的时机调用gc函数。

上述就是本文的全体内容,希望对我们的学习抱有扶助。

您大概感兴趣的篇章:

  • 详解PHP使用Redis存款和储蓄session时的二个Warning定位
  • PHP实现Session入库/存入redis的方法
  • PHP使用Redis取代文件存款和储蓄Session的方法
  • php redis实现多台服务器内网存款和储蓄session并读取示例
  • 浅析PHP布满式中Redis完成Session的主意
  • ThinkPHP自定义Redis管理SESSION的贯彻情势
  • php实现Session存储到Redis
  • php Session存储到Redis的方法
  • redis 代替php文件存款和储蓄session的实例

本文由www.qjdy.com-奇迹赌场发布于佳美特设计,转载请注明出处:一个基于redis的处理session的方法

关键词:

上一篇:其实写爬虫的思路十分简单

下一篇:没有了