0

ユーザーがテストを実行し、学習コンテンツをホストできるようにする Web サイトを作成しています。ログインしているユーザーが複数の論理セッションを持つことができるようにしたくありません。そのため、基本的に、同じアカウントにログインしている複数のブラウザーまたはコンピューターからの同時使用を制限し、最新でない/最新のセッションからの要求を無効にします。しかし、asp.netフォーム認証を使用してこれに最適に接続する方法についてはよくわかりません。

私は考えています:

  • UserID、UniqueSessionID の行を持つ、ActiveSessions という名前のデータベース テーブルを作成します。この UniqueSessionID をクライアントの暗号化された AuthCookie に保存します。

  • ユーザーが認証されず、標準のログイン ページ /account/login などからログインする場合、新しい UniqueSessionID を作成し、それを AuthCookie と ActiveSessions テーブルにそれぞれ保存して、既存の値を上書きします。認証が発行するデフォルトの AuthCookie フォームのコンテンツを復号化してコピーし、このコピーされたデータを使用して新しい AuthCookie を作成し、UniqueSessionID を挿入してからクライアントに返す必要があると思います。

  • AuthCookie が保持する UniqueSessionID がデータベース内の ID と一致しない、またはそれぞれのユーザーのレコードが欠落しているリクエストが届いた場合、セッションを無効にしてブラウザーをログイン ページにリダイレクトするか、セッションを強制終了してエラーを発行します。 Ajax リクエスト。

  • User LastActivityDate が一定の時間を超えた場所などに基づいて、ActiveSessions テーブル内のレコードをクリーンアップする、ある種のスケジュールされたサービスを作成します。

理想的には、フォーム認証が、このロジックを貼り付けて、コントローラー/メソッドなどの属性でこれを行うことを避けることができるいくつかのフックを提供することを望んでいます.

また、セッション状態とその Cookie を完全に使用したくありません。

4

1 に答える 1

0

私は非常によく似た要件を持っていました。私の状況では、ユーザー ID が一度に 1 つのデバイスからのみログインされていることを確認する必要がありました (ちなみに、AD ではなくフォーム認証)。ユーザー ID が既存のデバイスにログインしているときに別のデバイスにログインしようとすると、既存のデバイスのセッションが強制終了され、新しいデバイスにログインできるようになりました。私が作成した実装は完璧に機能し、これまでのところ設計に欠陥は見つかりませんでした。Stack Overflow の元の投稿に解決策を書きました。

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

于 2013-08-19T20:31:28.930 に答える