主页

Codeigniter3 session问题

近期负责维护一个16年的老项目,需要迁移到我负责的服务上,PHP版本7.1。移植完成后打开看到登录页面,正高兴着发现系统登录不进去,看起来像是session问题,在本地环境PHP7.2测试是没问题的 。

问题描述

观察http请求,发现http请求带的sessionID和相应的ID不匹配,每次服务都response一个新的sessionID。在框架入口文件加入 session_start(); 观察返回的sessionID并没有问题,但是框架内置的session就会出现问题,这是为什么呢?
查看框架封装的session类,在 system/libraries/Session/Session.php:129 有如下代码

if (isset($_COOKIE[$this->_config['cookie_name']])
    && (
        ! is_string($_COOKIE[$this->_config['cookie_name']])
        OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
    )
)
{
    unset($_COOKIE[$this->_config['cookie_name']]);
}

这个会检查cookie的sessionID格式是否正确,刚好我现在的格式不正确(可以在看cookie值或者是session_id();查看)所以这个cookie的值被清理掉了,导致session值也取不出来

点我阅读更多...

Websocket与php通信

最近学习了websocket的握手协议,打开和关闭连接等基础内容。最近用PHP实现了和websocket的双向通信,学习的概念的时候感觉看懂了内容,真正实践过程中还是会遇到各种问题,网上也有一些关于PHP和websocket的实现,但是只有自己亲手写过之后才知道其中的感受。 websocket协议提供给javascript的API就是特别简洁易用,就不多说了,下面主要说双向通信解码问题; error: WebSocket connection to ‘ws://127.0.0.1:1999/’ failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED 这个原因是因为双方使用的协议不一致导致的连接失败,服务端接受到的是http Header 头信息,需要服务端来解码

点我阅读更多...

Mysql 负载过高

昨天渠道推了一波用户,大概用户新增3~4w左右,网站基本上动不了了,分析过他的流量后发现不是流量暴增或者黑客攻击引起的。

登录服务器发现CPU 爆满,mysql 占 %100 ~ %100 上下,登录 mysql 发现查询根本进行不下去,平均一个 sql 运行 2s+。

用 show processlist 查看mysql正在执行的线程。发现大量的sleep和超时的线程,kill掉所有sleep的或者超时的线程。但发现连接数马上又暴增。仔细观察一些超时的连接所执行的 SQL 语句,发现跟它的user表相关的查询超时的情况特别多。 使用check table user发现表并没有损坏。

查看 QPS 和 TPS 发现不是很高,以现在服务器的配置完全可以支撑的

点我阅读更多...

Mysql迁移数据导致崩溃

前天收到用户反馈,部分地区打不开我们的应用,一开始检查猜测是机房网络、对全国各地的连通性不通。后来检查服务器,发现机房的网络对三大运营商的连通性不是三线直连,是单线电信的,所以联通和移动网络访问会出现丢包的问题。 接下来我们就开始迁移备用服务,因为是用的docker环境,所以迁移起来比较方便。 mysql的迁移是数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL服务下。 数据迁移过来之后但此时服务器一直卡住,过段时间直接timeout,启动失败!看mysql日志,出现大量如下错误

InnoDB: Error: page 47 log sequence number 13576757483
InnoDB: is in the future! Current system log sequence number 8214.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
mysql_1     | information that should help you find out what is causing the crash.
This could be because you hit a bug. It is also possible that this binary
[ERROR] mysqld got signal 6 ;
点我阅读更多...

Docker安装lnmp

docker加速

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

重启docker服务 service docker restart

安装docker-compose

点我阅读更多...