2009-06-17 3 views
3

私は、会社のいくつかの他の場所で使用するカスタムビジネスオブジェクトにログインの詳細を渡すためにカスタムのMembershipProviderを実装しています。しかし、いったん認証したら、この初期化されたビジネスオブジェクトをセッションに保存して、後で他のページで使用したいと思います。例を挙げましょう。カスタムMembershipProviderのユーザーセッションに何かを追加できますか?

public override bool ValidateUser(string username,string password) 
{ 
    try 
    { 
     // I want to keep this "object" in the Session to be used later on 
     CustomBusinessObject object = new CustomBusinessObject(username, password); 

     return true; 
    } 
    catch (CustomBusinessAuthenticationException) 
    { 
     return false; 
    } 
} 

これを行う方法はありますか?このカスタムMembershipProviderを実装することでSessionオブジェクトにアクセスする方法はすぐにはわかりませんでした。

答えて

3

セッションにアクセスするには、System.Web.HttpContext.Currentを呼び出します。 HttpContext.Currentがnullであるかどうかを確認するカスタムメンバーシッププロバイダでカスタムプロパティを作成するだけで、nullが返されます。それ以外の場合はセッション値に応じてアクセスします。

public object CustomObject 
{ 
    get 
    { 
     if(System.Web.HttpContext.Current == null) 
     { 
      return null; 
     } 
     return System.Web.HttpContext.Current.Session["CustomObject"]; 
    } 
    set 
    { 
     if(System.Web.HttpContext.Current != null) 
     { 
      System.Web.HttpContext.Current.Session["CustomObject"] = value; 
     } 
    } 
} 
0

System.Web.HttpContext.Current.Sessionにアクセスする必要があります。

System.Web.HttpContextnullになることを覚えておいてください。プロバイダがASP.Netパイプライン外で使用されている場合、プロバイダ内で使用するとASP.Netに緊密に接続されます。

+0

タイトカップリングについて言及していますか?悪い考えですか?もしそうなら、あなたは精巧にできますか? –

+0

タイトカップリングは常に悪い考えです;)プロバイダーモデルはポータブルであることを前提としています。ASP.Netの概念だけではありません。しかし、これはあなたのアプリにとって懸念されないかもしれません。 – womp

+0

さて、IoCの追加を計画しているので、緊密な結合を回避することがコアコンセプトです。しかし、このオブジェクトはこのウェブサイトの非常に重要な部分ですので、私はそれをよりよく抽象化する方法を見なければなりません。ありがとう。 –

関連する問題