为什么我的会话ID在服务器场服务器上多次更改?

时间:2013-08-23 06:49:52

标签: asp.net-mvc-4

我在网络服务器场服务器上有一个Web应用程序(mvc4和.net4.5),有一件事令我困惑,我的会话ID改变了whiteout原因并强烈地丢失了我在会话状态下存储它们的所有用户数据。但它在本地机器上运行良好。

我在我的网络配置中使用此配置:

<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]

它就像服务器不使用我的配置并自己工作。 我想知道是否有可能在我的服务器场服务器上设置了一些配置,如果它不使用我的配置并且自己有用吗?

2 个答案:

答案 0 :(得分:1)

要从评论扩展,您似乎必须按照以下Microsoft支持文章正确配置您的网络应用

http://support.microsoft.com/kb/325056

答案 1 :(得分:-1)

使用服务器端状态管理,如果客户端在会话中间切换服务器,则新服务器不一定能够访问客户端的状态信息(因为它存储在不同的服务器上)。您可以使用具有服务器端状态管理的多个服务器,但您需要智能负载平衡(以始终转发来自的请求) 客户端到同一服务器)或集中式状态管理(状态存储在一个 所有Web服务器都可以访问的中央数据库)。

  • 确保所有网络服务器中都有相同的MachineKey,否则他们无法共享会话数据。
  • 您在会话中存储的对象需要可序列化