7

私はこれを理解しようとしてネットを精査するのに2時間以上費やしました. 複数のフォーム送信を 60 秒より早く停止しようとしています。これが私が使用しているものです。

session_start();
if (!isset($_SESSION['last_submit']))
    $_SESSION['last_submit'] = time();

if (time()-$_SESSION['last_submit'] < 60)
    die('Post limit exceeded. Please wait at least 60 seconds');
else
    $_SESION['last_submit'] = time();

私はこのビットをサイトで見つけましたが、それを機能させる限り、他に何も理解できませんでした. ページの最初に、前のページの POST 結果で DB クエリを実行するこのコードがあります。$last_submit特定の値に設定する必要がありますか? どんな助けでも大歓迎です。

4

2 に答える 2

7

2 つの問題があります。まず、最初の実行でセッション値を に設定しているtime()ため、最初の試行で常に制限超過エラーが発生します。2 番目の問題は、 にタイプミスがあることです$_SESION

試す:

session_start();

if (isset($_SESSION['last_submit']) && time()-$_SESSION['last_submit'] < 60)
    die('Post limit exceeded. Please wait at least 60 seconds');
else
    $_SESSION['last_submit'] = time();

また、ユーザーはチェックをバイパスするために Cookie を拒否したり、セッション Cookie を削除したりできるため、これは絶対確実ではないことに注意してください。

于 2012-10-10T08:56:52.537 に答える
2

最後の声明:

$_SESION['last_submit'] = time();

次のようにする必要があります。

$_SESSION['last_submit'] = time();

あなたはSを忘れました...

また、このコードは死ぬdieことになり、ステートメントが実行されることを意味します。

別:

if (time() - ( isset($_SESSION['last_submit'])?$_SESSION['last_submit']:0 )< 60) 
    die('Post limit exceeded. Please wait at least 60 seconds'); 

// update the session
$_SESSION['last_submit'] = time(); 
于 2012-10-10T08:56:48.760 に答える