1

Web での複数ログインを無効にしたい。たとえば、ユーザーがすでにシステムにログインしている場合などです。システムは、ユーザーが別のブラウザーまたはコンピューターに再度ログインすることを無効にする必要があります。現在、データベースを使用してこれを実行しようとしました。login_status のような列があります。ユーザーがログインすると、オフラインの場合は 1 と 0 に更新されます。ユーザーがログアウトせずにブラウザを閉じた場合。ログインしたままになるので、ユーザーは管理者にログアウトを依頼する必要があります。問題は、最大 30 分のアイドル時間までにユーザーを自動的にログアウトしたいことです。これをどうしようか困っています。

複数のログインを無効にして、ユーザーがアイドル状態であるかどうかを判断し、自動的にログアウトする方法はありますか? 私はクッキーとセッションについて考えています。

4

5 に答える 5

4

訪問者が一度に複数の場所からログインできる理由は、ASP.net にログインするたびに同じ認証トークンが割り当てられるためです。したがって、認証トークン自体では、ユーザーがログインしている場所を区別することはできません。

これにはおそらく多くの方法がありますが、原則として、ユーザーのセッション状態に識別情報を保存し、リクエストごとにこれを確認するだけで済みます。たとえば、ログインすると、IP アドレスがセッション データとして保存されます。次に、後続の認証済みリクエストごとに、リクエストの送信元の IP を現在の IP と比較できます。2 つが一致しない場合は、ユーザーをログアウトします。

または、IP が十分な識別子ではない場合 (たとえば、ユーザーがルーターの背後からログインしている場合、複数の PC が IP を共有します)、ログイン時にユーザー認証トークンに識別情報を追加できます。これを行う方法に関するチュートリアルは次のとおりです。

http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/

ユーザーがログインするたびに、一意の GUID が生成され、セッション データおよび認証トークンの一部として保存されます。要求ごとに 2 つを比較し、失敗した場合はユーザーをログアウトします。

これらはいくつかの可能性です。他にもあると確信しています。

さらに良い方法は、asp.netが生成するときにasp.net認証トークン自体に影響を与えて何らかの変更を導入することかもしれませんが、これが可能かどうかはわかりません。

グーグルは私に何も与えなかった。

于 2013-02-22T17:28:07.240 に答える
1

決して理想的ではありませんがSignInLockTime、ビットフィールドの横にフィールドを追加しlogin_status、ログインステータスの更新中にログインステータスの更新時刻を書き込みます。そこから、アプリで構成されたタイムアウトを設定できるため、timeout時間が経過してからSignInLockTime自動ロック解除できます。

于 2012-10-19T08:20:51.203 に答える
1

ご質問への回答から、実際にやりたいことは、ユーザーが 2 つの場所から同時にログインするのを防ぐことであると思われますが、そうですか?

データベースのユーザー レコードに対してセッション ID を保存するのはどうですか。ユーザーがログインするときに、データベース内のセッション ID を置き換えます。すべての承認リクエストで、提供されたセッション ID をユーザー レコードに対して保存されているかどうかを確認します。異なる場合は、別の場所でログインしているため、再度ログイン ページにリダイレクトします。この方法では、他のマシンでのログインは可能ですが、他のマシンでの既存のセッションは、新しいログインの結果として無効になります。

于 2012-10-19T09:44:04.007 に答える
1

参照してください:

同じユーザー ID が複数のデバイスにログインしようとしている場合、他のデバイスでセッションを強制終了するにはどうすればよいですか?

デフォルトでは、.NET はこれをサポートしていません。.NET では同時ログインが可能です。ご存じのとおりです。

これとまったく同じ要件があり、上記のリンクに示されている非常に洗練されたソリューションを思いつきました。一言で言えば、私の要件は、一度に 1 人のユーザーのログインのみを発生させることでした。同じユーザー ID が別の場所でログインしようとすると、別のセッション ID での既存のログインをチェックすることによって、最初のログインのセッションが強制終了されます (これにより、ユーザー ID が複数のインスタンスからログインできるようになりました)。これは一般的ですが、別のコンピューター [別のセッション ID] からではありません (たとえば、誰かが資格情報を盗んだことが原因である可能性があります)。コードを変更することで、おそらくこの動作を変更できます。つまり、すでにアクティブで使用中の最初のログインを強制終了する代わりに、2 回目のログイン試行を防止できます。

もちろん、必要なものに 100% 適合しない場合もありますので、必要に応じて自由に変更してください。

于 2013-07-08T14:00:14.177 に答える
-2

単純な (しかし良くない) オプションの 1 つは、Session_End 終了イベントでユーザーをログアウトすることです..しかし、これが良いオプションかどうかはわかりません..

于 2012-10-19T08:26:32.593 に答える