ユーザーがテストを実行し、学習コンテンツをホストできるようにする Web サイトを作成しています。ログインしているユーザーが複数の論理セッションを持つことができるようにしたくありません。そのため、基本的に、同じアカウントにログインしている複数のブラウザーまたはコンピューターからの同時使用を制限し、最新でない/最新のセッションからの要求を無効にします。しかし、asp.netフォーム認証を使用してこれに最適に接続する方法についてはよくわかりません。
私は考えています:
UserID、UniqueSessionID の行を持つ、ActiveSessions という名前のデータベース テーブルを作成します。この UniqueSessionID をクライアントの暗号化された AuthCookie に保存します。
ユーザーが認証されず、標準のログイン ページ /account/login などからログインする場合、新しい UniqueSessionID を作成し、それを AuthCookie と ActiveSessions テーブルにそれぞれ保存して、既存の値を上書きします。認証が発行するデフォルトの AuthCookie フォームのコンテンツを復号化してコピーし、このコピーされたデータを使用して新しい AuthCookie を作成し、UniqueSessionID を挿入してからクライアントに返す必要があると思います。
AuthCookie が保持する UniqueSessionID がデータベース内の ID と一致しない、またはそれぞれのユーザーのレコードが欠落しているリクエストが届いた場合、セッションを無効にしてブラウザーをログイン ページにリダイレクトするか、セッションを強制終了してエラーを発行します。 Ajax リクエスト。
User LastActivityDate が一定の時間を超えた場所などに基づいて、ActiveSessions テーブル内のレコードをクリーンアップする、ある種のスケジュールされたサービスを作成します。
理想的には、フォーム認証が、このロジックを貼り付けて、コントローラー/メソッドなどの属性でこれを行うことを避けることができるいくつかのフックを提供することを望んでいます.
また、セッション状態とその Cookie を完全に使用したくありません。