質問

セッション内で現在ログインしているユーザーに関する情報をキャッシュします。この情報は、 CurrentUser グローバル アプリケーション クラスのプロパティが使用されます。これは、MembershipProvider のカスタム実装で GetUser() を呼び出すことによって行われます。これにより、セッションからユーザーがロードされるか、DB からユーザーがロードされてセッションにユーザー オブジェクトがスローされます。

このシナリオにはどう対処すればよいでしょうか?

  1. ユーザーがログインします。
  2. 管理者はユーザーを削除します(または非アクティブ化...ポイントは、これ以上ログインできないことです)。
  3. ユーザーのセッションが期限切れになります。
  4. ユーザーはページに移動するか、リクエストなどを行います。

現在、このシナリオが発生すると、ASP .NET フレームワークが GetUser() を呼び出しますが、データベース内でユーザーが見つからないため、何も返されない (有効期限が切れたため、セッション内に何もない) ため、NullReferenceExceptions があちこちでスローされます。

役に立ちましたか?

解決

ユーザーがサインインしているとアプリが認識しているにもかかわらずユーザーが見つからない場合、1 つのオプションは次の方法を使用することです。 FormsAuthentication.SignOut() ASP.NET にユーザーのことを忘れさせます。その後、ログイン画面または匿名モードに戻る必要があります。

他のヒント

null を返す場合は、GetUser() から例外をスローします。その後、Application_Error イベントでその特定の例外をトラップし、ログイン ページにリダイレクトすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top