0

私は、jQueryの非同期性を使用してphpスクリプトを呼び出すWebサイトをプログラミングしています。二重のスクリプト呼び出しを避けるために、私は2つのことをしたいと思います。

  • スクリプト呼び出しをトリガーするボタンを無効にします。これは正常に実行されました
  • 呼び出されるphpスクリプトにタイマーを設定します。このタイマーは、同じユーザーによって1秒以内に呼び出されたかどうかを確認し、呼び出された場合は終了します。

最初に、これは比較的簡単だと思い、次のコードを思いつきました。

if(!isset($_SESSION['time'])) $_SESSION['time']=time();
else if(time()-$_SESSION['time']<=1){
    //If less than one second ago, timer reset
    $_SESSION['time']=time();
    exit;
}

最初は問題なく動作しますが、その後、再度チェックする必要がある場合は、もちろん、非常に古い時間がセッションに保存されており、そこに残っているため、ユーザーは何度でもスクリプトを呼び出すことができます。

これを解決する方法はありますか?ありがとうございました!

チャールズ

編集

私の質問はおそらくこれと重複している可能性があります-2番目の回答に何か価値があると思いますか?

ソリューションが見つかりました

これが解決策です:

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 1 < time())){
    $_SESSION['time'] = time();
}else if(time()-$_SESSION['time']<=1){
    //Timer reset
    $_SESSION['time']=time();
    exit;
}
4

2 に答える 2

1

最も簡単な修正は、時刻値が設定されているがX秒より古い場合に上書きすることです。

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 30 < time())) {
    $_SESSION['time'] = time();
}

30の値を必要なタイムアウトに変更します。

于 2012-07-02T22:47:35.967 に答える
0

私はおそらく少し違った方法で問題を攻撃し、無効になったAJAX呼び出しを中止します。

たとえば、ユーザーがなんらかの方法でボタンを2回クリックした場合、2回目のクリックで最初のクリックのajaxリクエストを中止できます。

クライアント側で問題に対処することで、サーバーのオーバーヘッドを低く抑えながら、ユーザーが作成しているルーズエンドをクライアントにモップアップさせることができます。

この他の質問は、その詳細に役立つはずです。

于 2012-07-02T23:12:47.210 に答える