安装redis

  1. 安装redis https://www.xstnet.com/article-50.html
  2. 安装phpredis扩展 https://www.xstnet.com/article-42.html

设置php.ini

  1. 打开php.ini, 查找session.save_handler, 将其值设置为 redis
  2. 查找session.save_path, 将其设置为"tcp://127.0.0.1:6379″, 注意要加双引号

如果 redis 有密码, 请将save_path设置为

// 如果有密码
session.save_path = "tcp://127.0.0.1:6379?auth=youpwd″
// 如果没有密码
session.save_path = "tcp://127.0.0.1:6379″

整体如下

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=youpwd″

修改完记得重载nginx, 重启php-fpm

上图

如果有密码但是没有设置的话, 会报下面的错误

Warning: session_start(): Failed to read session data: redis (path: tcp://127.0.0.1:6379)
Fatal error: Uncaught RedisException: NOAUTH Authentication required

不能修改php.ini? 试试ini_set函数

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');

测试

// 设置显示错误气提示
ini_set('display_errors', true);
error_reporting(E_ALL);// 配置session 存储于redis
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=123456789');session_start();
// 这个就是redis中存储数据的key,
// redis用session_id作为key 并且是以string的形式存储
// php向redis写入数据时是已经序列化之后的数据
$redisKey = 'PHPREDIS_SESSION:' . session_id();// SESSION 赋值测试
$_SESSION['message'] = "Hello, I'm in redis";
$_SESSION['arr'] = [1, 2, 3, 4, 5, 6];echo $_SESSION["message"] , "<br/>";
echo "Redis key =    " . $redisKey . "<br/>";echo "以下是从Redis获取的数据", "<br/>";
// 取数据'
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('123456789');echo $redis->get($redisKey);

输出

Hello, I'm in redis
Redis key = PHPREDIS_SESSION:u14hqvsvcnr6m0n2qt4eh53642
以下是从Redis获取的数据
message|s:19:"Hello, I'm in redis";arr|a:6:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;}

通过redis-cli查看当前key

[xstnet~]$ redis-cli
127.0.0.1:6379> auth 123456789
OK
127.0.0.1:6379> get PHPREDIS_SESSION:u14hqvsvcnr6m0n2qt4eh53642
"message|s:19:\"Hello, I'm in redis\";arr|a:6:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;}"
127.0.0.1:6379> TTL PHPREDIS_SESSION:u14hqvsvcnr6m0n2qt4eh53642
(integer) 1417
127.0.0.1:6379> 

可以看到, 已经赋值成功了, 这里使用TTL显示获取剩余时间正好是session默认的1440秒减去我们操作的时间得到的结果

关于 session.save_handler和session.save_path

  • session.save_handler: 定义了来存储和获取与会话关联的数据的处理器的名字。默认为 files
  • session.save_path: 定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp

session_path 指令还有一个可选的 N 参数来决定会话文件分布的目录深度。例如,设定为 ‘5;/tmp’ 将使创建的会话文件和路径类似于 /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。要使用 N 参数,必须在使用前先创建好这些目录。在 ext/session 目录下有个小的 shell 脚本名叫 mod_files.sh,windows 版本是 mod_files.bat 可以用来做这件事。此外注意如果使用了 N 参数并且大于 0,那么将不会执行自动垃圾回收,更多信息见 php.ini。另外如果用了 N 参数,要确保将 session.save_path 的值用双引号 “quotes” 括起来,因为分隔符分号( ;)在 php.ini 中也是注释符号。

官方提示

文件储存模块默认使用 mode 600 创建文件。通过 修改可选参数 MODE 来改变这种默认行为: N;MODE;/path ,其中 MODE 是 mode 的八进制表示。 MODE 设置不影响进程的掩码(umask)。

Caution
使用以上描述的可选目录层级参数 N 时请注意,对于绝大多数站点,大于1或者2的值会不太合适——因为这需要创建大量的目录:例如,值设置为 3 需要在文件系统上创建 64^3 个目录,将浪费很多空间和 inode。
仅仅在绝对肯定站点足够大时,才可以设置 N 大于2。

查看更多信息 https://www.php.net/manual/zh/session.configuration.php#ini.session.save-handler

本文发布于 https://www.xstnet.com/article-108.html

php session之存储在redis的方法相关推荐

  1. php redis序列化,php session之存储在redis的方法

    安装redis 设置php.ini 打开php.ini, 查找session.save_handler, 将其值设置为 redis 查找session.save_path, 将其设置为"tc ...

  2. php session存到redis,php Session存储到Redis的方法

    php Session存储到Redis的方法 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置 复制代码 代码如下: session.save_handl ...

  3. php Session存储到Redis的方法

    详细的php-redis地址:https://github.com/phpredis/phpredis 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装 修改php.ini的设置 ...

  4. SESSION存储于redis(CI3)

    2019独角兽企业重金招聘Python工程师标准>>> CI3的Session的重大改变就是默认使用了原生的Session,这符合Session类库本来的意思,似乎更加合理一些.总体 ...

  5. sessionlistener方法中获取session中存储的值报空指针异常_从Golang实践中得到的教训...

    当使用复杂的分布式系统时,可能会遇到并发处理的需求.我们知道golang的协程是处理并发的利器之一,加上Golang为静态类型和编译型使得其在企业中使用越来越广泛.Mode.net公司系统每天要处理实 ...

  6. springBoot(20):使用Spring Session实现集群-redis

    一.session集群的解决方案 1.1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomc ...

  7. PHP集群中SESSION共享方案之Redis

      我记得我之前有写过在PHP集群中使用memcached来共享SESSION的解决方法,其实redis还是一样!出差在外,咱就别太讲究了,码篇博客做为睡前甜点吧 搭建PHP集群的第一步就是设置负载均 ...

  8. session的存储方式和配置

    Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.我们控制用户去权限中经常用到Session来存储用户状态,这篇文章会讲下Session的存储方式.在w ...

  9. 修改session的存储机制

    <?php  //修改session的存储机制 //最起码应该有一个 读方法, 和一个 写方法. //1, 我们先去建立 读方法 和 写方法. //2, 告知session系统,使用我们的方法完 ...

最新文章

  1. mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)
  2. ubuntu 进入 recovery mode
  3. css自动限制图片大小
  4. 多看看把,条件太多了--leetcode 93. 复原 IP 地址
  5. MATLAB实战系列(二十四)-大规模邻域搜索(LNS)求解带时间窗的车辆路径问题(VRPTW)(附matlab源代码)
  6. 主表如何统计在附表中的出现次数?
  7. nginx 防止恶意域名解析_配置nginx只允许域名访问,禁止ip访问【图文教程】
  8. IPython系统相关内容及其配置信息
  9. 区块链开发指南_区块链软件开发详解
  10. 音频播放IOS:AVAudioPlayer音频播放器
  11. Java 简单爬虫 代码
  12. python拟合曲线求方程,曲线拟合方程python
  13. 全平台视频转GIF软件对比与推荐(iOS/安卓/Windows/Mac)
  14. 计算机应用技术5g通信,浅谈5g网络通信技术【浅谈多媒体通信技术的应用】
  15. 利用朴素贝叶斯进行新闻分类
  16. Swift 声明(Declarations)
  17. 微服务实施笔记(五)——生产环境部署
  18. C++服务器(一):了解Linux下socket编程
  19. hihoCoder - 1272 买零食
  20. BackTrack 5 notes

热门文章

  1. 让照片在Apple(iphone / iPad)上显示在地图中正确的位置
  2. wps自动保存的备份文件查找路径【多次救急,亲测好用】
  3. Python实验之基于数据类型的应用
  4. 珠宝销售软件服务器,珠宝首饰进销存*管理软件
  5. 2020 Android 面试重难点(万字篇),字节,移动端app开发框架
  6. Android逆向之旅---Android中分析抖音和火山小视频的数据请求加密协议(IDA动态调试SO)
  7. 冲激脉冲抽样定理matlab,抽样定理实验心得.docx
  8. 海底捞面馆是谁的拦路虎,又是谁的敲门砖?
  9. 计算机应用情话,最新版暖人的情话短句 看看你有没有被撩倒
  10. 利用交换机命令查看IP地址对应连接的端口