1

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

我在我的网络配置中使用这个配置:

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

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

4

2 回答 2

1

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

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

于 2013-08-23T07:30:06.660 回答
-1

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

  • 确保您在所有 Web 服务器中拥有相同的 MachineKey,否则它们将无法共享会话数据。
  • 您存储在会话中的对象需要可序列化
于 2013-08-23T07:45:21.347 回答