私は、ポータルにアクセスするためにユーザーの認証が必要なASP.Netアプリケーション(イントラネット)を開発しています。ASP.Netセッションにおけるオブジェクトの永続化
現在、従業員オブジェクトは、正常に認証されたInProcセッション状態に保存されます。次に、マスターページのPageLoadメソッドで、従業員のセッションが空(null)であることを確認します。つまり、現在のリクエストが認証されていないことを確認してから、ログインページにリダイレクトしました。
マスターページPageLoad:私も従業員にログインまたは権限などの彼のレベルに関するいくつかの詳細を取得するために、ほぼすべてのページに従業員のセッションを使用し
if (Session["Employee"] == null) Response.Redirect("~/Login.aspx");
..
マイ質問:
- このようなシナリオを処理するのに適していますか?
- セッション状態がサーバーでリサイクルされることがあります(紛失)ので、PageLoadのセッション状態をのchlidページに呼び出した場合、セッションはnullですが、マスターページのonLoadメソッドセッションの存在のためには、子ページonLoadメソッドの後にのみ実行されます。統一された場所でどのようにセッションの存在を確認できますか?セッションの状態にアクセスするたびに、セッションの存在をチェックしたくないからです。
- セッションが終了したらメソッドをトリガーすることはできますか?私はGlobal.asaxでSession_Endを試みましたが、それは私に何らかのメソッドを呼び出したりページにリダイレクトすることを許しません。
は
詳細な回答のためにDavidさん、ありがとうございました。私のコードを変更しました。サンプルコードのような静的なクラスを作成しましたが、例外は何ですか?現在、私はApplicationExceptionを特定のメッセージ "Session Not Found"で使用し、次にApplication_Errorメソッドで内部例外のメッセージがそのメッセージと等しいかどうかをチェックし、それに応じて応答します。そして、EmployeeクラスはApp_Codeではなく別のプロジェクトにあることに注意してください。例外を処理する際に何か違いがあるかどうかはわかりません。 –
@OsamaMortada:あなたは 'ApplicationException'を投げることができます。たぶん 'SecurityException'ですか?この場合、カスタム例外を作成してそれをスローすることもできます。 'NotLoggedInException'のようなものです。カスタム例外の大きな点は、独自のフィールドを定義することができることです。その例外タイプをチェックする 'Application_Error'では、それらのカスタムフィールドから簡単にデータを取得できます。 – David
Davidさん、ありがとうございました。私は、ApplicationExceptionが常にHttpException内にスローされ、内部の例外から取得しなければならないことに気づいたので、SecurityExceptionが優れていると思います!!アプリケーション例外がHttpException内で常に歪んでいる理由はわかりません。ありがとうございますDavid: –