場景:
操作1:在接口A對$_SESSION['key']賦值A,即$_SESSION['key']=A;
操作2:在接口B對$_SESSION['key']賦值B,即$_SESSION['key']=B,同時輸出$_SESSION['key']的值,結果爲B;
操作3:在接口C取出 $_SESSION['key'] 的值,結果爲A;
爲什麼呢?爲什麼呢?
作者百思不得其解。。。
以爲是什麼設置有問題導致的,上網找了一大堆資料,結果沒用。
然後再幾個小時後,發現框架裏有個坑。。。
即:在操作1和操作2之間,有段檢測入口的程序代碼,在檢測到接口不是A是,就關閉了session的寫功能,即調用了函數
session_write_clode();
這段代碼只有1行,且在文件前面不起眼的地方,於是乎作者忽略了。。
原來 session_write_close() 應該是爲了防止加載session阻塞了頁面或者是出於安全考慮防止session被非法修改,所以就關閉了session的寫入功能,但可以讀取。。。
好吧,就是這個session_write_close()導致的。。