2017-08-18 70 views
0

我們正面臨一個問題,即用戶使用多個選項卡,每個選項卡將爲該特定用戶共享一個會話,因此我們希望每個選項卡都具有唯一會話,我們已經在「InProc 「所以我們添加了Cookieless =」UseUri「即sessionState mode =」InProc「cookieless =」UseUri「。 添加這個幫助我們與每個選項卡有一個獨特的會議,但是這隻能在IE私人模式,但不是在IE正常模式下,鉻& firefox,它卡在登錄頁面上,我們的登錄方法是Azure活動目錄,即(聯邦)身份驗證,頁面不停地加載,並且它不會移動到我們應用程序的主頁,我不知道發生了什麼事,請你幫忙。如果使用sessionState mode =「InProc」cookieless =「UseUri」是好還是不好的方式?C#MVC多選項會話問題

這是我們用於AAD認證

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

回答

0

這是不可能的代碼。當一個會話被創建時,一個cookie被髮送到帶有會話ID的客戶端,而類似於Web瀏覽器的東西會盲目地將這個cookie發送回到同一個域的每個請求,無論是在一個標籤還是一百個標籤中。如果會話cookie被服務器接收到,它將恢復該會話。

它在「私人」模式下工作不是因爲您所做的更改,而僅僅是因爲在私人模式下,每個選項卡都會獲得完全獨特的上下文,其中包括Cookie。但是,在正常瀏覽模式下,所有選項卡都可以訪問cookie,並且您無法做到這一點。

+0

那麼這是什麼意思sessionState mode =「InProc」cookieless =「UseUri」?你能幫我限制用戶,當他在MVC中打開第二個標籤嗎? – PaTHP

+0

任何人可以延伸幫助? – PaTHP

+0

有沒有幫助。你想做什麼是不可能的。期。 InProc只是意味着會話存儲將存儲在內存中,與正在運行的進程綁定(AppPool)。這隻對開發有用,應該更改爲在生產中提供更穩定和可靠的會話存儲。 Cookieless意味着會話ID將被附加到URL而不是設置爲cookie。這是一個非常糟糕的主意,因爲你泄漏了會話。它也被棄用。這與你在這方面想要達成或幫助的事情沒有任何關係。 –