在会话期间保持随机种子

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;
}