• 締切済み

IE8で2つのタブで同じサイトのアクセスを防止する

ASPサービスでシステムを運営しています。 ユーザーはログイン後、画面入力した情報を送信し、データベースに登録します。 1人のユーザーが2回ログインして、2つの画面(タブ)を表示して、操作すると、データベースアクセスエラーが発生することがあります。これを防止するために、2つの対応を考えています。 (1)現在ログイン中のユーザーが、再ログインしてきたとき、警告メッセージを表示する。 (2)警告メッセージを無視してログインした場合、  ユーザーがログインするごとに異なる「ログイン番号」を付与して、ユーザー情報DBに保存し、  画面情報の中にも「ログイン番号」をもたせてPCに送る。(hiddenで)  Submitするときは「ログイン番号」を一緒に送信する。  サーバーに送られてきたデータのユーザーIDと「ログイン番号」を、  保存してあるユーザー情報DBの内容と照合し、不一致の時は、  「ログインしている画面と異なるので画面を閉してください。」とメッセージを表示する。 教えていただきたいこと。 (1)もっと簡単な方法をご存知であれば教えてください。 (2)この方法ではこのような場合にうまくいかない(欠点)、考え不足の点、注意点 などありましたら教えてください。 よろしくご教授のほどお願いします。

みんなの回答

回答No.1

クライアントにブラウザを使う以上、1ユーザ1端末限定というのは無理があります。 専用のクライアントを使うシステムであれば ウィンドウが閉じられたタイミングで ユーザのログインを自動切断するとかの処理とかいろいろできますが ブラウザでは 難しいです。 ログアウトせず その後PC再起動して ログインすると警告されてログインできないとかの トラブルが発生しそうです。 多人数が同時使用するシステムであれば そもそもスレッドセーフで設計されているはずです。 同じユーザが同時操作して発生するエラーが何か判りません(デッドロックやデータ不整合?) がそのエラーが発生しないよう 排他処理やデータの整合チェック等の設計を見直された方が よろしいのではと考えますがいかがでしょうか。

Horirin39
質問者

お礼

ご丁寧なご回答ありがとうございます。 実は、データの不整合が発生し、その設計を見直してきた結果、最後に一番難しい1ユーザー2重ログイン(タブで2画面出した場合)の対応をしなければ解決できないことがわかったのです。 よろしくお願いします。

関連するQ&A