技术实践

服务器在查询session的接口全部挂掉

昨日(2020年11月14日),访问小程序、网站、全栈导航,发现了部分接口抛出服务器异常

羊先生的头像
羊先生2020.11.15 · 3 分钟阅读 · 76 阅读
服务器在查询session的接口全部挂掉封面
文章正文还需 3 分钟

描述

昨日(2020年11月14日),访问小程序、网站、全栈导航,发现了部分接口抛出服务器异常

image.png

昨日加班量,只有在下班修复了

image.png

打开app_debug模式

本地调试windows

本地调试没有发现任何异常,因为本地是windows环境

线上linux

打开调试抛出

php 复制代码
session_name(): Cannot change session name when session is active

谷歌一番,有说是

PHP7.2出现的一个警告 目前没有具体的修复方法
出现故障环境 linux php7.2 nginx
本人解决方法为 将session全部换为cookie 项目运行成功

stackoverflow回答

PHP 7.2 Warning: “Cannot change session name when session is active”

大部分说是,PHP 7.2引入所带来的一个问题

找了一圈没有有找到想要的答案,重启试一下

c++ 复制代码
// 重启服务器
shutdown -r now 
// 启动docker
systemctl restart  docker
// 启动容器,nginx,mysql ...
docker-compose start
// 单个启动
docker-compose nginx start

再次刷新,发现好了,why,没搞懂
我尝试清理了,runtime目录
删除文件

c++ 复制代码
rm -rf 目录名字

创建文件

c++ 复制代码
mkdir 名字

查看当前路经

c++ 复制代码
pwd

当删除暴露了一个问题

php 复制代码
session_start(): open(/xxxxx/xxxx/runtime/temp//xxxxxxxxxxxxxx, O_RDWR) failed: Permission denied (13)

这是一个目录权限问题

设置读,写,执行权限

c++ 复制代码
chmod 777 /xxxx/runtime

chmod命令:

c++ 复制代码
chmod 用3个数字来表达对 用户(文件或目录的所有者),用户组(同组用户),其他用户 的权限:
如:chmod 777 /test
数字7是表达同时具有读,写,执行权限:
读取--用数字4表示;
写入--用数字2表示;
执行--用数字1表示;
按照规则,如你想设置/test目录的权限为:
    对用户可读可写:4(读取)+ 2(写入)= 6 ;
    对用户组可读可执行:4(读取)+ 1(执行)= 5 ;
    对其他用户仅可读:4(读取);
  这样就可以用命令:
    chmod 654 /test

顺利解决这个问题

总结

在对tp5的session的这个模块,在次研究下,不过看新版tp6已经对session和cookie重新设计了,难道是之前tp5存在遗留bug

tp6新版Session和Cookie设计变化