SQL Server会话状态,Web场和IIS配置

时间:2009-11-30 22:22:30

标签: asp.net sql-server iis-7 sql-session-state

所以我使用SQL Server 2008和临时数据库设置SQL Server会话状态,今天我决定只查看表中的数据,以便在ASPStateTempApplications表中找到它:

AppId AppName
538231025 / lm / w3svc / 1 / root
611758131 / lm / w3svc / 3 / root
802488340 / lm / w3svc / 4 / root
-940085065 / lm / w3svc / 4 / root / webapp
685293685 / lm / w3svc / 5 / root
1210055478 / lm / w3svc / 5 / root / webapp

我们有2个负载均衡的Web服务器。

当我查看两个服务器的Web应用程序的ID时,我看到web1的app1的id为4,web2的app1的id为5.同样的事情发生在另一个app上。 web1的app2的id为1,web2的app2的id为3。

我的常识告诉我,由于会话ID使用appid,因此Web服务器不会共享会话。我对么?如果是这样,为什么这个小细节在文档中不那么明显?我应该在两个Web服务器上使ID匹配吗?

1 个答案:

答案 0 :(得分:6)

在创建SessionId期间使用AppId,以帮助避免从一个应用程序到另一个应用程序的冲突。它是通过计算IIS应用程序路径的哈希值创建的。

在您的环境中,流程可能是这样的:

  1. 服务器A创建会话ID,将其设置在cookie中,并将一些数据存储在相应的会话中(ASPStateTempSessions中的一行)。会话ID列是通过将会话ID与AppID连接而创建的。
  2. 服务器B接收具有预先存在的会话ID的请求,并使用它从ASPStateTempSessions表中查找关联的会话数据。如果应用ID不同,生成的密钥也会不同。
  3. 使多个服务器具有共享相同会话的不同AppId的净效果是,一台服务器创建的ID不会与另一台服务器的ID冲突,具有不同AppIds的计算机将看不到彼此的会话。 / p>