在会话期间保持随机种子
Maintain random seed for duration of session
背景:如果您为 prng 播种,它将打印出相同的随机序列。所以,如果我告诉你我用了123种子,得到了1、5、2、4。那么,你可以用123种子,得到1、5、2、4。
在最简单的情况下,我想做的是...我制作了一个让您输入种子的网页。然后,它会显示一个随机数和一个 "next" link。您单击下一个 link 并获得下一个随机数。问题是点击"next"时访问的页面与之前的页面没有任何关系。所以,它不是基于输入的种子。
我正在尝试做的,而且我显然忽略了一些事情,是在会话期间维护种子。我可以用 srand 为第一个随机数播种兰特。然后,我需要将更新后的种子存储在会话中,以便下次用户出现时我可以发送正确的下一个种子。 srand 有反义词吗?我不想播种兰特。我想获得让它在下一次加载时以当前状态启动所需的值。
您可以通过始终使用最后生成的随机数重新初始化 srand 来解决您的问题。你 "mix up" 种子,但你仍然有一个可重复的方法来生成随机数。
这是一些代码:
function getNextRandomNumber()
{
$mySeed = 0; // a default seed value
if (isset($_SESSION['seed']))
{
// continue our seed serie
$mySeed = $_SESSION['seed'];
}
else if (isset($_GET['seed']))
{
// reinitialize the seed serie with a user's value
$mySeed = $_GET['seed'];
}
// reproducable srand value
srand($mySeed);
// generate the random number
$rand = rand();
// We save the seed
$_SESSION['seed'] = $rand;
return $rand;
}
背景:如果您为 prng 播种,它将打印出相同的随机序列。所以,如果我告诉你我用了123种子,得到了1、5、2、4。那么,你可以用123种子,得到1、5、2、4。
在最简单的情况下,我想做的是...我制作了一个让您输入种子的网页。然后,它会显示一个随机数和一个 "next" link。您单击下一个 link 并获得下一个随机数。问题是点击"next"时访问的页面与之前的页面没有任何关系。所以,它不是基于输入的种子。
我正在尝试做的,而且我显然忽略了一些事情,是在会话期间维护种子。我可以用 srand 为第一个随机数播种兰特。然后,我需要将更新后的种子存储在会话中,以便下次用户出现时我可以发送正确的下一个种子。 srand 有反义词吗?我不想播种兰特。我想获得让它在下一次加载时以当前状态启动所需的值。
您可以通过始终使用最后生成的随机数重新初始化 srand 来解决您的问题。你 "mix up" 种子,但你仍然有一个可重复的方法来生成随机数。
这是一些代码:
function getNextRandomNumber()
{
$mySeed = 0; // a default seed value
if (isset($_SESSION['seed']))
{
// continue our seed serie
$mySeed = $_SESSION['seed'];
}
else if (isset($_GET['seed']))
{
// reinitialize the seed serie with a user's value
$mySeed = $_GET['seed'];
}
// reproducable srand value
srand($mySeed);
// generate the random number
$rand = rand();
// We save the seed
$_SESSION['seed'] = $rand;
return $rand;
}