我的網站用於編碼/解碼cookie數據的函數使用rand()。這根本不是一個理想的方法,但它是CakePHP 1.2中的默認密碼函數,所以我暫時堅持使用它,除非我想使所有用戶的cookies失效(而現在我真的不這樣做)。srand(種子)在不同的服務器上產生不同的值
問題是我將網站移動到不同的服務器,並且新服務器無法解碼由舊服務器設置的Cookie,因爲儘管兩個服務器都使用srand(seed),但rand()會生成不同的值同樣的種子。我想象的問題是,這兩個服務器正在使用不同的內部php函數來生成隨機數,正如在這個有關密碼函數的cakephp錯誤中提到的:http://cakephp.lighthouseapp.com/projects/42648/tickets/1524-securitycipher-is-platform-dependent
我想知道如何改變密碼函數新服務器能夠正確解碼舊服務器設置的cookie。任何方式來強制PHP使用相同的內部隨機函數或東西?
這兩臺服務器是否運行相同版本的PHP?他們是否都在同一個操作系統上運行? – Bryan
舊服務器是Centos 4.7和PHP 5.2.14,新服務器是Centos 5.7和PHP 5.2.17。 – makeee
平臺的差異是一個可能的罪魁禍首。由於它看起來像是在用於PHP實現的C代碼中對srand算法做出的決定,因此選擇自己的代碼可能不太可能。您必須查看PHP在內部使用的函數是否在PHP API中提供(它看起來不像它們),或者弄清楚PHP如何根據平臺做出決定(通過檢查C碼)。最簡單的解決方案可能是匹配平臺 - 也許如果你使用相同的PHP版本,你會得到相同的行爲。 – Bryan