ユーザーが複数回クリックする (またはルートを更新する) ことを防止したいページにリンクがあります。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 インスタンス/ワーカーの予期しない終了によって引き起こされます。
これが本当なら、コードが実際に完全なリクエストを完了するのを止めたいので、これは問題のようです...