是否存在某种缓存问题?
我的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。等,是我的浏览器不刷新页面?但这无论如何也无法解释重复的数字。
答案 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位数字。马克贝克是完全正确的。