2

ユーザーが複数回クリックする (またはルートを更新する) ことを防止したいページにリンクがあります。PHP、特に Laravel 4.2.* でこれを防止する必要があります。

Laravel のビルトイン セッション処理 Facade を使用して、実行中のルートの最後に変数を Session に追加します。

Session::put('preventClick', true);

メソッドの開始時に、セッションにアイテムがあるかどうかを確認し、false の場合はコードを実行します**

if (!Session::has('preventClick')) {
     ... CODE ...
}

残念ながら、これは機能しません。チェック ifSession::has('preventClick')は常に と評価されfalseます。

PHP ネイティブの使用$_SESSION['preventClick']は期待どおりに機能するのに、なぜ Laravel の Session クラスはこれを行わないのでしょうか? Session::save()確認のために の後に明示的に呼び出してみSession::put(...)ましたが、それでも期待どおりに動作しません。***

一貫性を保つために、すべてを Laravel フレームワークに保持したいと思います。

フル (簡易) メソッド

public function placeOrder() {
    if (!Session::has('preventClick') {
        // ... Some code here ... //
        Session::put('preventClick', true);

        return $someValue;
    }
}

*注: PHP だけではクリックを実際に防止できないことは理解していますが、コードの実行を防止したいと考えています。

**注: アプリの後半で、このセッション変数が不要になったことがわかったら、このセッション変数をクリアします。

***注: Laravel セッションは、別のページ リクエスト/リダイレクト間で動作します。

編集

別の回答でこれを見つけました: https://stackoverflow.com/a/26165986/1694116

Laravel のセッションは、応答を生成しない限り、変更が永続的であるとは見なしません (これは、symphony をベースとして使用した結果です)。そのため、 app->run() が適切に終了し、更新する前に応答を返すことを確認してください。あなたの問題は、ほとんどの場合、コードのどこかにある die() メソッド、または PHP インスタンス/ワーカーの予期しない終了によって引き起こされます。

これが本当なら、コードが実際に完全なリクエストを完了するのを止めたいので、これは問題のようです...

4

0 に答える 0