2011-11-09 60 views
1

我的網站用於編碼/解碼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使用相同的內部隨機函數或東西?

+0

這兩臺服務器是否運行相同版本的PHP?他們是否都在同一個操作系統上運行? – Bryan

+0

舊服務器是Centos 4.7和PHP 5.2.14,新服務器是Centos 5.7和PHP 5.2.17。 – makeee

+0

平臺的差異是一個可能的罪魁禍首。由於它看起來像是在用於PHP實現的C代碼中對srand算法做出的決定,因此選擇自己的代碼可能不太可能。您必須查看PHP在內部使用的函數是否在PHP API中提供(它看起來不像它們),或者弄清楚PHP如何根據平臺做出決定(通過檢查C碼)。最簡單的解決方案可能是匹配平臺 - 也許如果你使用相同的PHP版本,你會得到相同的行爲。 – Bryan

回答

1

我傾向於認爲這可能是一個理想的行爲。所以說http://php.net/manual/en/function.mt-srand.php(我知道你是不是函數srand但mt_srand仍然):

相同的種子不再產生他們在以前版本的值相同的序列。這種行爲預計不會再發生變化,但依然依賴它是不安全的。

0

我有那種同樣的問題,在這裏I link my solution,我知道這是很老的問題,但希望有人發現在未來來到這裏的解決方案。正如第一個答案所說@chx,它是從srand()改爲mt_srand()。

相關問題