2017-08-18 2 views
0

Wir stehen vor einem Problem, wo ein Benutzer mehrere Registerkarten verwendet, jede Registerkarte wird eine Sitzung für diesen bestimmten Benutzer teilen, so dass wir jede Registerkarte eine eindeutige Sitzung haben möchten, haben wir bereits Sitzungsmodus in "InProc "Also haben wir cookeless =" UseUri "hinzugefügt, dh sessionState mode =" InProc "cookieless =" UseUri ". Dies half uns mit jeder Registerkarte mit einer einzigartigen Sitzung, aber dies funktioniert nur im IE privaten Modus, aber nicht im IE normalen Modus, Chrom & Firefox, es bleibt auf der Anmeldeseite stecken, ist unsere Login-Methode Azure Active Directory dh (Verband) Authentifizierung , die Seite wird geladen und es bewegt sich nicht zur Startseite unserer Anwendung, ich weiß nicht, was los ist, bitte helfen Sie mir.C# MVC MultipleTabs Sitzung Problem

FYI, wir speichern Klasseneigenschaften in der Sitzung, so dass sessionState mode = "InProc" cookieless = "UseUri" ist gut oder schlecht?

Hier ist der Code, den wir für AAD-Authentifizierung

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); 
        } 
       } 
     }); 
} 

Antwort

0

Das ist nicht möglich verwendet haben. Wenn eine Sitzung erstellt wird, wird ein Cookie mit der Sitzungs-ID an den Client gesendet, und etwas wie ein Webbrowser sendet dieses Cookie blind für jede Anfrage an die gleiche Domäne zurück, sei es in einem Tab oder in hundert. Wenn der Sitzungscookie vom Server empfangen wird, wird diese Sitzung wiederhergestellt.

Es funktioniert im "privaten" Modus nicht wegen der Änderungen, die Sie gemacht haben, sondern einfach, weil im privaten Modus jede Registerkarte einen völlig einzigartigen Kontext erhält, einschließlich Cookies. In einem normalen Browsermodus haben jedoch alle Registerkarten Zugriff auf das Cookie, und Sie können nichts dagegen tun.

+0

Also, was bedeutet das sessionState mode = "InProc" cookieless = "UseUri"? Könntest du mir helfen, den Benutzer einzuschränken, wenn er einen zweiten Tab in MVC öffnet? – PaTHP

+0

Wer kann Hilfe verlängern? – PaTHP

+0

Es gibt keine Hilfe zu haben. Was du willst, ist nicht möglich. Zeitraum. InProc bedeutet einfach, dass der Sitzungsspeicher im Arbeitsspeicher ist und an den laufenden Prozess (AppPool) gebunden ist. Das ist wirklich nur in der Entwicklung nützlich und sollte in einen stabileren und zuverlässigeren Session-Speicher umgewandelt werden, der in der Produktion bereitgestellt wird. Cookieless bedeutet, dass die Sitzungs-ID an die URL angehängt und nicht als Cookie gesetzt wird. Es ist eine extrem schlechte Idee, weil Sie die Sitzung verlieren. Es ist auch veraltet. Nichts hat etwas damit zu tun, was Sie in dieser Hinsicht erreichen oder helfen wollen. –