繁体   English   中英

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

[英]SQL Server Session State, web farm, and IIS configuration

所以我使用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匹配吗?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM