php中的mt_rand()在每次刷新时都不生成新的数字,但是每5次生成一次

时间:2013-02-22 12:25:17

标签: php

是否存在某种缓存问题?

我的sql语句更新了mysql中的列。

$mysqli->query("UPDATE users SET user_sessions = user_sessions +1, user_password_token = ". mt_rand(1000000000,9999999999) ." WHERE user_name = '". $mysqli->real_escape_string($user_name) ."' AND user_password = '". $mysqli->real_escape_string($user_password) ."'");

在db中,我看到令牌每5次刷新只会更新几次。而且大部分它都有相同的价值!这是随机的想法吗?

重复的数字是神秘的:4294967295。

那么php缓存这个函数吗?

我也注意到如果我用echo输出mt_rand,这个问题就会消失。

:S

P.S。等,是我的浏览器不刷新页面?但这无论如何也无法解释重复的数字。

3 个答案:

答案 0 :(得分:0)

我对此并不十分确定,但也许您可以为每个调用添加随机/日期哈希。正如我在fireflake

中读到的那样
  

由于缓存控制的当前状态(不是标题,主题)而感到失望,我最终做了大多数人正在做的事情。在每次调用中附加一个随机的10个字符的字符串,这些字符串有效地欺骗了浏览器,这些信息可能会很重要,并使其正确更新页面。只需将其附加到每个GET的后面,并在每个POST中包含一个随机字段。

尝试看一下它是否是一个缓存问题!

答案 1 :(得分:0)

我单独运行了mt_rand(1000000000,9999999999)个代码段并没有得到相同的值。要了解它是关于MySQL缓存还是PHP缓存,请运行查询函数中的函数并分配变量。然后将变量放在查询函数中。如果结果相同,那可能就是MySQL。

否则,尝试一个函数:

    function nonce($size=32){//256 bit == 32byte. 
    $ret="";
    for($x=0;$x<$size;$x++){
        $ret.=chr(mt_rand(0,255));
    }
    return base64_encode($ret);
}

答案 2 :(得分:0)

嗯,我想我得到了......而神奇的数字4294967295与这个问题有关。

简单生成&lt;应该有10位数字。马克贝克是完全正确的。