记一次很久以前的出现的线上事故。
php.ini request_order
在之前的公司,曾今出现了一次线上运营事故,因这个bug导致项目延迟上线两小时。
故事是这样发展的,用户打开了http://xxx.xxx.com/xx/xx?openid=13445 这里的openid是分享链接带上的参数,然后根据这个openid进行了一系列的业务,帮这个分享者加游戏次数,加奖品。。。。。
代码如下:$shareOpenid = $_REQUEST['openid'];
然后奇迹就出现了,某些人访问该链接时,明明url后面的openid参数是A,结果代码中变成了B!!!
why!
【记一次很久以前的出现的线上事故。】聪明的人也许觉得这就是一个沙雕问题。没错,确实很沙雕,在第一行就写了原因。php.ini 中的request_order设置决定了预定义变量$_REQUEST的值及排序。当时的配置是gpc,也就是说如果querystring 中存在参数openid值为1,post fom-data中存在参数openid值为2,cookies中存在openid的cookie且值为3,那么通过$_REQUEST['openid'] 获取到的值就是3.
就是这么基础的问题。有一堆人访问了一个历史页面会设置一个当前用户的openid的cookie,然后就炸了。
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 20170612时间和注意力开销记录
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 叙述作文
- 2019年12月24日
- 【故障公告】周五下午的一次突发故障
- 人生感悟记#环境仪器宋庆国成长记#072
- 2019.4.18感恩日记
- 我要我们在一起(二)