2013-08-23 28 views
1

我在Web服務器服務器上有一個Web應用程序(mvc4和.net4.5),有一件事令我困惑,我的會話ID正在改變白板的原因,而且我失去了將它們存儲在會話狀態中的所有用戶數據。但它在本地機器上正常工作。爲什麼我的會話ID在服務器場服務器上多次更改?

我用這個配置在我的web配置:

<sessionState mode="StateServer" customProvider="DefaultSessionProvider" 
cookieName="abcd" timeout="120" > 
    <providers> 
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
    </providers> 
</sessionState> 

和我的機器的關鍵是:

<machineKey compatibilityMode="Framework45"  
    validationKey="702C65CF39B1ED514AC4B92326C3A84B3D88990DDF784AA0895659B528ED95F8CA0A9CD1AF5ED92A2599362684CB8D204AC30D07E6BF0CF65194A5129" 
    decryptionKey="1C49E6BA2F9423387FBC91389A0C5C8D06B61875BCE4916A40474ED" 
    validation="SHA1" decryption="AES" /> 

我的會話超時是120分鐘,我找不到爲什麼這種情況發生我的web應用程序。我使用我的日誌類來查看我的web應用程序上發生了什麼,我相信 會話ID更改。

例如,當用戶轉到其他區域或用戶想通過網上銀行付款付款時,我將其重定向到銀行頁面,並且當用戶在同一窗口中從銀行重定向到我的網站時(我不打開另一個選項卡或窗口做到這一點)會話ID改變。

我在會話中存儲像用戶ID這樣的小數據。

我用這個語法來存儲會話:

HttpContext.Current.Session[System.Web.HttpContext.Current.Session.SessionID] = "abc" 

和讀取的語法如下:

var myval=HttpContext.Current.Session[System.Web.HttpContext.Current.Session.SessionID] 

它這樣做服務器沒有用我的配置,做自己的工作。 我想知道是否有可能在我的服務器場服務器上設置了一些配置,並且它不使用我的配置並自行工作?

+0

你檢查這個帖子http://stackoverflow.com/questions/686873/allowing-session-in-a-web-farm-is- stateserver-good-enough – dove

+0

我在我的網站上設置了所有必要的配置以隔離它並且我的對象具有序列化屬性 – motevalizadeh

+0

包括這一點:http://download.microsoft.com/kb/325056 – dove

回答

-1

使用服務器端狀態管理,如果客戶端交換機中的服務器在會話的中間,新服務器不一定有權訪問客戶端的狀態信息(因爲它存儲在不同的服務器上)。您可以將多個服務器與服務器端狀態管理一起使用,但您需要智能負載平衡(始終將客戶端的 請求轉發到同一服務器)或集中式狀態管理(其中狀態存儲在中央數據庫中的一個 )網絡服務器可以訪問)。

  • 請確保您的所有Web服務器都具有相同的MachineKey,否則它們將無法共享會話數據。
  • 您在會話存儲的對象必須是可序列化
相關問題