0

ある種のキャッシュの問題はありますか?

mysqlの列を更新するSQLステートメントがあります。

$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はこの関数をキャッシュしていますか?

また、エコーを使用してmt_randを出力すると、この問題が解消されることに気付きました。

:S

ps待ってください、私のブラウザはページを更新していませんか?しかし、これはとにかく繰り返される数を説明しません。

4

3 に答える 3

0

まあ、私はそれを手に入れたと思います...そしてマジックナンバー4294967295は問題と関係があります.

10桁未満の数字を生成するだけで十分です。マーク・ベイカーは完全に正しかった。

于 2013-02-22T12:52:20.000 に答える
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 に答える