先勝ち方式 †
- データベースを使用しログイン状況テーブルを作成
- ログインID ... ユニーク、ユーザIDなど
- セッションID
- クライアント識別ID ... クライアントを識別するIDです。クッキーを利用(ログイン時刻+乱数などでユニークな値を作成)
- 最終アクセス時間 ... ミリ秒まで記録
- ログイン時にログインID、パスワードのチェックを行います。
- ログイン状況テーブルにログインIDのレコードがなければ、ログイン状況テーブルにレコードを追加して、何らかの次の処理に進みます。(ログインOK)
- ログイン状況テーブルにログインIDのレコードがあり、クライアント識別子が同じあれば、ログイン状況を更新し、何らかの次の処理に進みます。(ログインOK)
- クライアント識別子が異なれば、最終アクセス時間がセッションタイムアウト時間をいくらか過ぎていれば、ログイン状況を更新し、何らかの次の処理に進みます。(ログインOK)
- 最終アクセス時間がセッションタイムアウト時間を過ぎていなければ、他の端末から同じログインIDでログイン中ということ警告メッセージを表示し、処理は進めません。(ログインNG)
- ログイン状況テーブルは、サーバー側に制御が移った時点で最終アクセス時間を更新します。
- ログアウト時には、ログイン状況テーブルから当該のログイン情報を削除します。
- よくログアウトしないでブラウザを終了することがある。また画面を開いたまま長時間放置することもよくある。そのため最終アクセス時間とクライアント識別IDを使う。
- つまりデータ上ログインしていることになるが、最終アクセス時間がタイムアウト時間が過ぎているいればタイムアウトしたとみてログインを可能にする
- 画面を表示してすぐブラウザを閉じることもある。この場合、同じ端末であれば、タイムアウト時間の経過を待たずにログイン可能とするためクライアント識別IDを使用する。