代码之家  ›  专栏  ›  技术社区  ›  Jonas Stawski

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

  •  6
  • Jonas Stawski  · 技术社区  · 15 年前

    因此,我使用SQL Server 2008和temp数据库设置了SQL Server会话状态,今天我决定查找表中的数据,但在aspstatetempapplications表中却发现了这一点:

    应用程序名称
    538231025/lm/w3svc/1/根
    611758131/lm/w3svc/3/根
    802488340/lm/w3svc/4/根
    -940085065/lm/w3svc/4/root/webapp/网络应用程序
    685293685/lm/w3svc/5/根
    1210055478/lm/w3svc/5/root/webapp/网络应用程序

    我们有两个负载平衡的Web服务器。

    当我查看这两个服务器的Web应用程序的ID时,我发现web1有id为4的app1,web2有id为5的app1。另一个应用程序也会发生同样的情况。web1有id为1的app2,web2有id为3的app2。

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

    1 回复  |  直到 15 年前
        1
  •  6
  •   RickNZ    15 年前

    在创建sessionid期间使用appid,以帮助避免从一个应用程序到另一个应用程序的冲突。它是通过计算IIS应用程序路径的散列来创建的。

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

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

    多个服务器具有不同的应用程序共享相同会话的净效果是,一个服务器创建的ID不会与另一个服务器创建的ID冲突,具有不同应用程序的计算机也不会看到彼此的会话。

    推荐文章