Iis

ASP.NET MVC、IIS 7.5 - 跨伺服器失去會話(負載平衡)

  • January 4, 2012

我們有一個在 3 個 Web 節點上執行的站點。我們正在使用 SQL Server 會話儲存。

我們最近又添加了兩個,結果發現使用者的會話在被發送到其中一台機器時失去了。

我們已經檢查了站點 ID 以及機器驗證密鑰和解密密鑰。

編輯:

我確實忘記提及該機器是農場中現有機器的複製(VMWare)版本。

已解決 - 我們只是擦除了新機器並重新安裝了 Server 08。這個問題的原因仍然未知。

您是否確認機器密鑰正在工作?一種方法是,如果您有表單身份驗證,則可以使用幾行程式碼來嘗試讀取身份驗證 cookie。如果機器密鑰無效,您將無法讀取 cookie,並且 User.Identity.IsAuthenticated 將為 false。SQL 會話狀態也需要機器密鑰,因此這是主要嫌疑人。

下面的一些範常式式碼。

如果您在 machine.config(而不是 web.config)中有您的密鑰,您可能需要驗證您是否更新了正確的文件。如果您同時擁有 .NET 3 和 4,則可能在四個地方都有一個 machine.config 文件。我通常更新所有四個只是為了確定。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config \

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\

另一種遙遠的可能性是您可能還想為機器密鑰散列算法指定 validation=“xxxx” 屬性。在 .NET4 中,預設的散列算法是 SHA256,但在以前的版本中是 SHA1。因此,通常最好將其包含在內,這樣它們都將是相同的。

ASP.NET 4 重大更改 - 預設雜湊算法現在是 HMACSHA256

受保護的配置提供程序。在網路場中共享機器密鑰僅適用於 RsaProtectedConfigurationProvider。如果 web.config 或 machine.config 僅指定 DpapiProtectedConfigurationProvider,它將不起作用:

指定受保護的配置提供程序

http://msdn.microsoft.com/en-us/library/68ze1hb2%28v=VS.100%29.aspx

範例 cookie 驗證程式碼:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
   try
   {
       FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
       Debug.WriteLine(String.Format("Cookie timeout: {0}, ticket.Expiration.ToString("yyyy-MMM-dd HH:mm:ss")));
   }
   catch (Exception e)
   { 
       Debug.WriteLine(String.Format("Error reading cookie: {0}", e.ToString()));
   }
}
else
{
   Debug.WriteLine("Cookie unavailable");
}

引用自:https://serverfault.com/questions/345413