2017-03-16 6 views
1

J'ai une application Web Forms qui ne possède pas de page de connexion. Techniquement, un utilisateur peut accéder directement à n'importe quelle page. Cependant, je dois être capable d'identifier l'utilisateur connecté sur chaque page. Je ne veux pas ajouter de code à chaque page. Je préfère définir une variable de session unique au début de la session. Pour cela, j'ajouté dans mon Global.asax.cs ce qui suit:Définition de variables de session uniques au niveau de l'application

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"]; 
      }    
     } 

Je vois maintenant qu'il donne le loggedInUser à tout utilisateur créé une dernière session. Ce qui veut dire que si Mike se rend sur le site, il verra les données qui le représentent en tant que connecté à l'utilisateur. Cependant, si Kate va sur le site après lui, Mike va maintenant voir les données de Kate. Fondamentalement, le dernier remplace les paramètres de tout le monde et Session_Start remplace la valeur de loggedInUser pour toutes les sessions actives.

Basé sur ce lien: 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 Il lit que je devrais être en mesure de définir des variables de session uniques pour chaque nouvelle session, mais mes résultats ne montrent pas cela.

Est-ce que je ne comprends pas comment cela fonctionne? Je dois définir une valeur de session unique au début de chaque session pour chaque utilisateur.

+0

est-ce que "loggedInUser" est un membre statique de votre global.asax?! – StfBln

Répondre

0

J'ai trouvé le problème. Le Session_Start fait ce qui est supposé être à un niveau de session unique. La façon dont je référençais la valeur de la session était erronée. Au lieu d'accéder à la valeur de session que j'étais en train de faire:

Person loggedInUser = Global.loggedInUser;

Ce qui a du sens, c'est qu'il renvoyait le dernier utilisateur à démarrer une session.