Php srand(seed)在不同的服务器上生成不同的值

Php srand(seed)在不同的服务器上生成不同的值,php,Php,我的站点用于编码/解码cookie数据的函数使用rand()。这根本不是一个理想的方法,但它是CakePHP1.2中的默认密码函数,所以我现在一直在使用它,除非我想使我用户的所有cookie无效(我现在真的不想) 问题是,我正在将站点移动到另一台服务器,而新服务器无法解码旧服务器设置的Cookie,因为rand()生成不同的值,即使两台服务器使用具有相同种子的srand(seed)。我认为问题在于两台服务器使用不同的内部php函数来生成随机数,正如关于密码函数的cakephp bug中提到的:

我的站点用于编码/解码cookie数据的函数使用rand()。这根本不是一个理想的方法,但它是CakePHP1.2中的默认密码函数,所以我现在一直在使用它,除非我想使我用户的所有cookie无效(我现在真的不想)

问题是,我正在将站点移动到另一台服务器,而新服务器无法解码旧服务器设置的Cookie,因为rand()生成不同的值,即使两台服务器使用具有相同种子的srand(seed)。我认为问题在于两台服务器使用不同的内部php函数来生成随机数,正如关于密码函数的cakephp bug中提到的:


我想知道如何更改新服务器上的密码功能,以便能够正确解码旧服务器设置的cookie。有没有办法强迫php使用相同的内部随机函数或其他东西?

我倾向于认为这可能是一种理想的行为。所以说(我知道你的是srand,不是mt_srand,但仍然是):

相同的种子不再产生与以前版本相同的值序列。这种行为预计不会再次改变,但仍然认为依赖它是不安全的


我倾向于认为这可能是一种理想的行为。所以说(我知道你的是srand,不是mt_srand,但仍然是):

相同的种子不再产生与以前版本相同的值序列。这种行为预计不会再次改变,但仍然认为依赖它是不安全的


我也遇到过类似的问题,我知道这是一个很老的问题,但希望将来有人能找到解决办法。正如第一个答案所说的@chx,这一切都是关于从srand()到mt_srand()。

我也有类似的问题,在这里,我知道这是一个非常古老的问题,但希望将来有人能在这里找到解决方案。正如第一个答案所说的@chx,这一切都是关于从srand()到mt_srand()的变化。

这两个服务器运行相同版本的PHP吗?它们都运行在同一个操作系统上吗?旧服务器是Centos 4.7和PHP 5.2.14,新服务器是Centos 5.7和PHP 5.2.17。平台上的差异可能是罪魁祸首。因为看起来关于srand算法的决定是在PHP实现的C代码中做出的,所以可能无法选择您自己的。您必须查看PHP内部使用的函数是否在PHPAPI中提供(看起来不像),或者了解PHP是如何基于平台做出决策的(通过检查C代码)。最简单的解决方案可能是匹配平台-如果使用相同的PHP版本,可能会得到相同的行为。两台服务器是否运行相同版本的PHP?它们都运行在同一个操作系统上吗?旧服务器是Centos 4.7和PHP 5.2.14,新服务器是Centos 5.7和PHP 5.2.17。平台上的差异可能是罪魁祸首。因为看起来关于srand算法的决定是在PHP实现的C代码中做出的,所以可能无法选择您自己的。您必须查看PHP内部使用的函数是否在PHPAPI中提供(看起来不像),或者了解PHP是如何基于平台做出决策的(通过检查C代码)。最简单的解决方案可能是匹配平台——如果使用相同的PHP版本,可能会得到相同的行为。