0

Is there some kind of caching issue?

I've sql statement which updates column in 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) ."'");

In db I see token gets update only few times in every 5 refresh. And mostly it gets same values! Bits the idea of random doesn't it?

Number that gets repeated is mystic: 4294967295.

So is php caching this function?

I also noticed if I output mt_rand with echo this problem disappears.

:S

p.s. wait, is my browser not refreshing page? But this would not explain repeated number anyways.

4

3 回答 3

0

我不太确定这一点,但也许你可以为每个调用添加一个随机/日期哈希。正如我在萤火虫中读到的

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

试试看是不是缓存问题!

于 2013-02-22T12:37:43.177 回答
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);
}
于 2013-02-22T12:37:45.967 回答
0

好吧,我想我明白了……神奇的数字 4294967295 与问题有关。

只需生成 < 10 位数字即可。马克贝克是完全正确的。

于 2013-02-22T12:52:20.000 回答