记一次很久以前的出现的线上事故。

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,然后就炸了。

    推荐阅读