0

私のアプリケーションでは、すべてのページが保護されているため、ページにアクセスするにはログインする必要があります。

また、システムの管理者はユーザーを追加できます。

今、何人かの人々は私が人々が同じアカウントを使って同時にログインするのを防ぐ必要があると私に言いました。

つまり、「John」という名前のユーザーがシステムにログインしている場合、パスワードを知っていると、他の人が「John」で再度ログインすることはできません。

また、あるユーザーがログインしたユーザーが自分の希望するアカウントを使用していることに気付いた場合、そのユーザーは前のユーザーをオフラインにすることができます。もしそうなら、私は現在のユーザーが各ページでオフになっているかどうかを判断する必要があります。これは簡単にできる作業ではありません。

これが必要なのかしら?

今日、非常に多くのWebサイトがこれを制限していないことがわかったので、たとえば、同じアカウントを使用してgmail / stackoverflow / yahooにログインし、同時に別のマシンで電気ショック療法を行うことができます。

だから誰でも私に提案を与えることができますか?


アップデート:

ここでは、asp.netのフォーム認証を使用します(メンバーシップはまだ使用していません)。また、データベースのt_userテーブルには、「isOnline」および「last_login_time」という名前の列があります。

ユーザーがログインするとき、「isOnline」を1に設定し、ログイン時間を保存します。

別のユーザーが再度ログインしようとすると、「isOnline」と時刻を確認します。

if("isOnline"==1 && DateTime.now-LastLogiTIme <40min) // where the 40 min is the form authenaication timeout.
  thisAccountHasLogined=true;

しかし、ユーザーがまだログインしていると仮定すると、ブラウザのCookieをクリーンアップし、ページを更新すると、ログインページにリダイレクトされますが、フォーム認証がタイムアウトする前に再度ログインすることはできません。 dbは1であり、彼のログインから現在までの期間はフォームのタイムアウトより大きくありません。

私は混乱しています。

4

2 に答える 2

1

いくつかのシナリオでは、複数のログインがないことは理解できましたが、実際には、それを実装する必要はありませんでした。

残念ながら、ユーザーがすでにログインしているかどうかを判断するための標準的なメカニズムはないと思います。これは、追加のロジックで行う必要があります。このアプリケーションでは、セッション情報を格納するためにデータベースを使用します。これを使用すると、ユーザーのセッションがこの中にすでに存在するかどうかを確認し、存在する場合はログインを許可しないという簡単なプロセスになります。

アップデート

私はこれに自分で興味があり、これを見つけました。

http://msdn.microsoft.com/en-us/library/system.web.security.membershipusercollection.aspx

この

http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.aspx

それらを使用すると、この情報を取得できる可能性があります。.IsOnline()ただし、これは、標準のasp.netメンバーシップを使用していることを前提としています。

于 2011-07-04T12:10:45.740 に答える
0

ユーザー名とパスワードを格納するテーブル ユーザーがログインしようとするとステータス列を追加 ログアウト時にステータスを「オンライン」に更新 ステータスを「ログアウト」に更新 ログインチェック中、ステータスがオンラインの場合は処理を終了します。これはこれを実装するためのアプローチかもしれません。

于 2011-07-04T12:19:47.133 に答える