热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于redis的处理session的方法

:本篇文章主要介绍了基于redis的处理session的方法,对于PHP教程有兴趣的同学可以参考一下。
一个基于redis的处理session的方法,如下。

 1 php
 2class Session_custom {
 3private$redis; // redis实例 4private$prefix = 'sess_'; // session_id前缀
 5 6    // 会话开始时,会执行该方法,连接redis服务器 7publicfunction open($path, $name) {
 8$this->redis = new Redis();
 9return$this->redis->connect("127.0.0.1",6379);
10    }
1112// 会话结束时,调用该方法,关闭redis连接13publicfunction close() {
14$this->redis->close();
15returntrue;
16    }
1718// 会话保存数据时调用该方法,在脚本执行完或session_write_close方法调用之后调用19publicfunction write($session_id, $data) {
20return$this->redis->hMSet($this->prefix.$session_id, array('expires' => time(), 'data' => $data));
21    }
2223// 在自动开始会话或者通过调用 session_start() 函数手动开始会话之后,PHP 内部调用 read 回调函数来获取会话数据。24publicfunction read($session_id) {
25if($this->redis->exists($this->prefix.$session_id)) {
26return$this->redis->hGet($this->prefix.$session_id, 'data');
27        }
28return '';
29    }
3031// 清除会话中的数据,当调用session_destroy()函数,或者调用 session_regenerate_id()函数并且设置 destroy 参数为 TRUE 时,会调用此回调函数。32publicfunction destroy($session_id) {
33if($this->redis->exists($this->prefix.$session_id)) {
34return$this->redis->del($this->prefix.$session_id) > 0 ? true : false;
35        }
36returntrue;
37    }
3839// 垃圾回收函数,调用周期由 session.gc_probability 和 session.gc_pisor 参数控制40publicfunction gc($maxlifetime) {
41$allKeys = $this->redis->keys("{$this->prefix}*");
42foreach($allKeysas$key) {
43if($this->redis->exists($key) && $this->redis->hGet($key, 'expires') + $maxlifetime <time()) {
44$this->redis->del($key);
45            }
46        }
47returntrue;
48    }
49}
5051// 调用自定义的session处理方法52$handler = new Session_custom();
53session_set_save_handler(
54array($handler, 'open'),
55array($handler, 'close'),
56array($handler, 'read'),
57array($handler, 'write'),
58array($handler, 'destroy'),
59array($handler, 'gc')
60);
6162// 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为,表示当脚本执行之后或调用exit()之后,存储当前会话数据并关闭当前会话63register_shutdown_function('session_write_close');
6465session_start();
6667// 可以使用session了

补充:

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

以上就介绍了基于redis的处理session的方法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

推荐阅读
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文详细介绍了如何在CentOS 6.5系统上安装和配置Redis 3.0.6,包括必要的环境准备、软件包下载、编译安装及基本功能测试。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
author-avatar
逆夏_Pretty
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有