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

Jon*_*ski 6 sql-server asp.net 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.同样的事情发生在另一个应用程序中.web1的app2的id为1,web2的app2的id为3.

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

Ric*_*kNZ 6

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

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

  1. 服务器A创建会话ID,将其设置在cookie中,并将一些数据存储在相应的会话中(ASPStateTempSessions中的一行).会话ID列是通过将会话ID与AppID连接而创建的.
  2. 服务器B接收具有预先存在的会话ID的请求,并使用它从ASPStateTempSessions表中查找关联的会话数据.如果应用ID不同,则生成的密钥也会不同.

使具有不同AppIds的多个服务器共享相同会话的净效果是,一个服务器创建的ID不会与来自另一个服务器的ID冲突,具有不同AppIds的计算机将不会看到彼此的会话.

  • @BMTU我在IIS 7中这样做了.右键单击网站 - 托管网站 - 高级设置.更改ID属性以匹配所有Web服务器. (2认同)