2

C# を使用して ASP.NET Web サイトを開発しました。簡単な認証モジュールもあります。ユーザーは、フォームを送信するだけでメンバーになることができます。

問題の領域:

このシナリオを言います。もちろん、一意のユーザー名とパスワードを使用して管理者としてログインした場合、同じ認証情報でログインできる他のユーザーはいないはずです。ユーザー アカウントごとに 1 回だけログインすることを明示的に意味します。

もちろん、私は Web をサーフィンして、ここに何か良いものを見つけました。(もちろん8点で答えてみました)。実際、それはうまく機能します。しかし、Session.Abandon();は をクリアしませんSession["UsersLoggedIn"]

問題:ユーザーがログアウトすると、セッションはクリアで問題ありません。しかし、セッションの有効期限が切れる前に再びログインすると、彼は失敗します! その理由は、Application["UsersLoggedIn"]まだ何らかの値があるため、 Login メソッドの if ステートメントは、ユーザーが既にログインしていると想定しているためです。どうすればこの問題を解決できますか?

何かアイデアはありますか?

ありがとうございました

4

2 に答える 2

2

これは、ソリューションの構築に役立つ場合があります。次のリンクは、あなたが言ったことを (ASP.NET MVC で) 実行する方法を示しています。ただし、このソリューションと必要なものとの違いは次のとおりです。ユーザー Bob は自分の PC からログインします。「Bob」という同じユーザー ID を使用する別のユーザーが、別のデバイス (異なるセッション ID) からログインします。2 番目のセッションを存続させながら、最初のセッションを強制終了します。あなたの言ったことから、逆の動作が必要だと思います.ユーザーIDがすでにログインしているときに、同じユーザーIDの2番目のインスタンスがログインすることを許可しませんよね? この例を使用して、必要に応じて変更できるはずです。

これは組み込みのメンバーシップのカスタム実装です (組み込みのメンバーシップを使用したくないと言ったことは知っていますが、以下の投稿から役立つ情報を得ることができると思います)。

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

于 2013-06-24T16:01:23.247 に答える
0

イベントのデバッグを試みてください。おそらく、セッションがクリアされるメソッドが「Session_End」の前に呼び出され、アプリケーションに保存されているコレクションから UserLoggedIn を削除できなくなります。(名前をセッションにドラッグするのではなく、メンバーシップ プロバイダーから名前を取得することをお勧めします。)

于 2013-06-24T16:10:41.747 に答える