2017-03-16 1 views
1

ログインページを持たないWebフォームアプリケーションがあります。技術的には、ユーザーは任意のページに直接アクセスできます。しかし、ログインしているユーザーが各ページにいるユーザーを特定できる必要があります。私は各ページにコードを追加したくありません。むしろ、セッションの開始時に一意のセッション変数を設定します。アプリケーションレベルで一意のセッション変数を設定する

protected void Session_Start(object sender, EventArgs e) 
     {       
      if (Session["LoggedInUser"] == null) 
      { 
       string networkId = HttpContext.Current.User.Identity.Name; 
       using (UnitOfWork unit = new UnitOfWork()) 
       {      
        if (networkId.IndexOf("HLM\\") > -1) { networkId = networkId.Substring(4, networkId.Length - 4); } 
        loggedInUser = unit.PersonRepository.GetByNetworkID(networkId);                    
        Session["LoggedInUser"] = loggedInUser; 
       } 
      } 
      else 
      { 
       loggedInUser = (Person)Session["LoggedInUser"]; 
      }    
     } 

私は今、それが最後のセッションを作成したものは何でも、ユーザーにloggedInUserを設定することを参照してください。このために私は以下の私のGlobal.asax.csに追加されます。つまり、Mikeがサイトに行くと、彼をloggedInUserとして表すデータが表示されます。しかし、Kateが彼の後のサイトに行くと、MikeはKateのデータを表示します。基本的に、最後の1つはすべての設定を上書きし、Session_StartはすべてのアクティブなセッションのloggedInUserの値を上書きします。

このリンクに基づく:https://books.google.com/books?id=nQkyi4i0te0C&pg=PA202&lpg=PA202&dq=C%23+set+unique+session+variable+in+global.asax&source=bl&ots=GV9nlEUzE5&sig=E4TT3NDbjp1GwEehgU3pLXKdvr0&hl=en&sa=X&ved=0ahUKEwiU9f322tvSAhVF7yYKHYaXCtwQ6AEITzAI#v=onepage&q=C%23%20set%20unique%20session%20variable%20in%20global.asax&f=false 新しいセッションごとに固有のセッション変数を設定できるはずですが、結果には表示されません。

私はこの機能の仕組みを誤解していますか?各ユーザーのセッションごとに一意のセッション値を設定する必要があります。

+0

は、あなたのglobal.asaxの静的メンバーである "loggedInUser"です。 – StfBln

答えて

0

問題が見つかりました。 Session_Startは、固有のセッションレベルで想定されていることを実行しています。私がセッション値を参照していた方法はすべて間違っていました。セッションの値にアクセスする代わりに、私は実際にやっていた:

Person loggedInUser = Global.loggedInUser;

セッションを開始するには最新のユーザーに戻っていたことになります。

関連する問題