2017-08-18 4 views
0

Nous sommes confrontés à un problème où un utilisateur utilise plusieurs onglets, chaque onglet partagera une session pour cet utilisateur particulier, nous voulons que chaque onglet ait une session unique, nous avons déjà le mode session dans "InProc" "donc nous avons ajouté cookieless =" UseUri "ie sessionState mode =" InProc "cookieless =" UseUri ". Ajout de ceci nous a aidé avec chaque onglet ayant une session unique mais cela a fonctionné seulement en mode IE privé mais pas en mode IE normal, chrome & firefox, il se bloque sur la page de connexion, notre méthode de connexion est Azure Active Directory ie (Fédération) authentification , la page continue de charger et de ne pas passer à la page d'accueil de notre application, je ne sais pas ce qui se passe, pourriez-vous s'il vous plaît aider.numéro de session multipletabs C# MVC

FYI, nous stockons des propriétés de classe en session donc en utilisant sessionState mode = "InProc" cookieless = "UseUri" est bon ou mauvais moyen?

Voici le code que nous avons utilisé pour l'authentification DAA

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); // Authentication type is cookies 

    app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

    app.UseOpenIdConnectAuthentication(
     new OpenIdConnectAuthenticationOptions 
     { 
      ClientId = clientId, 
      Authority = authority, 
      PostLogoutRedirectUri = postLogoutRedirectUri, 
      Notifications = new OpenIdConnectAuthenticationNotifications 
       { 
        AuthorizationCodeReceived = (context) => 
        { 
         X509Certificate2 cert = null; 
          X509Store store = new X509Store(StoreLocation.CurrentUser); 

         // Here the code all about certification & access token 

         return Task.FromResult(0); 
        } 
       } 
     }); 
} 

Répondre

0

Ce n'est pas possible. Quand une session est créée, un cookie est envoyé au client avec l'identifiant de session, et quelque chose comme un navigateur web envoie aveuglément ce cookie pour chaque requête au même domaine, que ce soit dans un onglet ou une centaine. Si le cookie de session est reçu par le serveur, il restaurera cette session.

Cela fonctionne en mode "privé" non pas à cause des changements que vous avez faits, mais simplement parce que chaque onglet obtient un contexte totalement unique en mode privé, y compris les cookies. Cependant, dans un mode de navigation normal, tous les onglets auront accès au cookie, et vous ne pouvez rien y faire.

+0

Alors qu'est-ce que cela signifie sessionState mode = "InProc" cookieless = "UseUri"? Pourriez-vous m'aider à restreindre l'utilisateur lorsqu'il ouvre un deuxième onglet dans MVC? – PaTHP

+0

Toute personne pouvant apporter de l'aide? – PaTHP

+0

Il n'y a pas d'aide à avoir. Ce que vous voulez faire n'est pas possible. Période. InProc signifie simplement que le stockage de la session sera en mémoire, lié au processus en cours (AppPool). Ce n'est vraiment utile que dans le développement, et devrait être changé en un stockage de session plus stable et plus fiable en production. Sans cookie signifie que l'identifiant de session sera ajouté à l'URL au lieu d'être défini en tant que cookie. C'est une très mauvaise idée, parce que vous fuyez la session. Il est également obsolète. Ni l'un ni l'autre n'a quoi que ce soit à faire avec ce que vous essayez d'accomplir ou d'aider à cet égard. –