2017-03-16 64 views
1

我有一个没有登录页面的Web窗体应用程序。从技术上讲,用户可以直接访问任何页面。但是,我需要能够识别每个页面上登录用户的身份。我不想向每个页面添加代码。我宁愿在会议开始时设置一个唯一的会话变量。为此,我加入到我的Global.asax.cs如下:在应用程序级别设置唯一的会话变量

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到任何用户上次创建一个会话。意思是,如果迈克去了网站,他会看到数据代表他作为loggedInUser。但是,如果凯特走到他身后,迈克现在会看到凯特的数据。基本上,最后一个覆盖每个人的设置,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

是“loggedInUser”你的global.asax的一个静态成员?! – StfBln

回答

0

我发现了这个问题。 Session_Start正在做一个独特的会话级别的应用程序。我引用会话值的方式都是错误的。我实际上并没有访问会话值:

Person loggedInUser = Global.loggedInUser;

这是有道理的,它返回最新的用户开始会话。