2011-12-05 15 views
0


解決できないような問題があります。私はアプリケーションのログインプロセスを作成しています。ユーザーがログインしようとすると失敗するたびに、試行記録が最大5回まで挿入/更新されます。 5回目の試行後、アカウントはロックされます。
私はそのプロセスの2つのテーブル、ユーザー情報が保存されている 'user'テーブル、 '試行'テーブルを持っています。
まず、試行回数をカウントするためにセッション変数またはCookie変数を使用することは望ましくありません(クッキーは削除することができますが、トラフィック量が多いのでセッション変数が大きくなります)。
最初に、試行表の行を更新するか、すべての行に新しい行を挿入するかはわかりません試行(私の好みは、最初の試行で挿入し、残りの4試行で行を更新することです)。
第2に、今日の試みは昨日とはまったく異なることを示す方法が必要です。たとえば、ユーザーが昨日ログインしようとした後、3回目の試行の後に成功し、今日再びログインしようとした場合、私は昨日の試行を増やそうとしません。ですから、ログインが成功するたびに、成功したログイン後の試みが新しいログインプロセスを単独で開始するようにする方法が必要です。
私の質問が明確かどうか分かりません。必要に応じて詳細を尋ねてください。
私はこのプロセスの解決策なしで2日間脳を麻痺させました。


おかげ

P.S:私は前後に処理するために旅を排除するために、処理のほとんどのためのストアドプロシージャを使用しています。ログインプロセス(おそらくMySQL/PHPで)

答えて

2

ログイン試行のために別のテーブルを用意するのではなく、ユーザーテーブルに新しい整数列としてカウンタを追加するだけです。失敗した試行が行われるたびに、そのレコードのその列を増分します。ログインが成功するたびに、そのレコードのその列を0にリセットします。

すべての試行について実行中の監査を続ける必要がある場合は、それは別の問題です。監査はログインプロセスの一部ではありません。その懸念から、何らかの種類の監査ログに失敗した試みを書きます。このログはデータベースのテーブルにすることはできますが、トランザクションテーブルには決してリンクしないでください。失敗したログインだけでなく、あらゆる種類のアプリケーションイベントの一般的なログシステムになることができます。 (再び、別の懸念があります。)

+0

ありがとうございます。それは確かにあなたの説明で非常に簡単だと思われる。 –

関連する問題