CI框架session使用redis存储

下面是框架内session配置代码
image.png

错误日志如下:
`Session: Unable to obtain lock for ci_session:gsqko2dlahlv21s8kil87nb3q60qvfpe after 30 attempts, aborting.

Severity: Warning --> session_start(): Failed to read session data: user (path: tcp://127.0.0.1:6379) system\libraries\Session\Session.php 143 `

请各位有经验的小伙伴帮帮忙

阅读 5.7k
2 个回答

经过各种百度谷歌查询,各种办法一一实验,最后卵用没有。没办法智能自己去查看源码了,一点一点排查。
1、既然是因为锁的问题,那就去找哪里有关于lock的代码;怎么找呢?因为我们用的是session存储redis,那么可以将范围缩小到一下这两个文件

system/libraries/Session/session.php
system/libraries/Session/drivers/Session_redis_driver.php

然后开始找lock,发现只有Session_redis_driver.php中可以搜索到lock字眼,然后我们一点一点往下走,
image.png
看到了,字面意思是获取锁的意思,我们点开看看,然后断点输出,看会发生什么。
image.png
结果是喜人的,它走了,说明我们的方向没错,然后一行一行往下看,不知道就一行一行的断点输出,结果发现以下这个if写的可能有问题;

image.png
下面是我改的
image.png
然后测试,好了没问题,在redis中也可以看到数据
image.png
如果还有问题,按一下方法试一下
在CI的config下创建redis.php文件,内容为

$config['socket_type'] = 'tcp';
$config['host'] = '自己的ip';
$config['password'] = NULL;
$config['port'] = 6379;
$config['timeout'] = 7200;

然后可以在redis可视化后台看看会不会有session存进来

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题