php.ini request_order
在之前的公司,曾今出現(xiàn)了一次線上運營事故,因這個bug導(dǎo)致項目延遲上線兩小時。
故事是這樣發(fā)展的,用戶打開了http://xxx.xxx.com/xx/xx?openid=13445 這里的openid是分享鏈接帶上的參數(shù),然后根據(jù)這個openid進行了一系列的業(yè)務(wù),幫這個分享者加游戲次數(shù),加獎品。。。。。
代碼如下:$shareOpenid = $_REQUEST['openid'];然后奇跡就出現(xiàn)了,某些人訪問該鏈接時,明明url后面的openid參數(shù)是A,結(jié)果代碼中變成了B?。。?/p>
why!
聰明的人也許覺得這就是一個沙雕問題。沒錯,確實很沙雕,在第一行就寫了原因。php.ini 中的request_order設(shè)置決定了預(yù)定義變量$_REQUEST的值及排序。當(dāng)時的配置是gpc,也就是說如果querystring 中存在參數(shù)openid值為1,post fom-data中存在參數(shù)openid值為2,cookies中存在openid的cookie且值為3,那么通過$_REQUEST['openid'] 獲取到的值就是3.
就是這么基礎(chǔ)的問題。有一堆人訪問了一個歷史頁面會設(shè)置一個當(dāng)前用戶的openid的cookie,然后就炸了。