繁体   English   中英

在多Web服务器场中,会话状态如何工作?

[英]In a multi web server farm, how does session state work?

案例1:StateServer

<system.web>
   <sessionState     mode="StateServer"     stateConnectionString="tcpip=127.0.0.1:42626"     sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"     cookieless="false"     timeout="20"   />
 ... 
</system.web>

案例2:SQL Server

<sessionState   mode="SQLServer"   stateConnectionString="tcpip=127.0.0.1:42626"   sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"   cookieless="false"   timeout="20" /> 

问题:1.在情况1和2中,必须在web.config中为服务器场中的每个Web服务器配置sql或状态服务器的适当位置。

  1. 我们可以将某些服务器配置为状态,将某些服务器配置为sql吗?

  2. 我们可以有一些无cookie的和有cookie的吗

  3. 假设如果仅使用<sessionState cookieless="true" /> ,那么默认情况下使用哪种模式? 可以在多服务器场中完成此操作,还是必须指定IP?

1.)我们可以将某些服务器配置为状态,将某些服务器配置为sql吗?

不,你不应该。 假设当用户发出请求时,Web场中的一台服务器会将会话存储在StateServer中。 现在,如果同一用户又发出另一个请求(通过单击一些链接等),然后想象如果您的负载均衡器将此请求发送到第二台Web服务器会发生什么? 与您为SqlServer模式配置的用户相同,该用户将没有会话,并且该用户的会话在首次请求时存储在状态服务器上。

2.)我们可以有一些无cookie的和无cookie的吗?

再次否,对于上面指出的非常相似的理解。 其中一台服务器将使用Cookie跟踪会话,另一台服务器将使用Cookieless(因此称为URI)跟踪同一会话,因此,如果将请求转发到其他服务器,则不会检测到会话。

3.)假设如果仅使用<sessionState cookieless="true" /> ,那么默认情况下将使用哪种模式? 可以在多服务器场中完成此操作,还是必须指定IP?

了解此设置: cookieless="true|false" ,仅用于跟踪客户端和服务器端之间特定用户的会话。

实际会话数据存储在SqlServer /状态服务器上,在您的模式设置中定义为:

<sessionState  mode="StateServer|SqlServer" ... />

如果未指定任何mode设置,则使用InProc默认值。


附加说明: Cookie或URI具有与之关联的SessionID SessionID是唯一的字符串,用于在访问网站之间跟踪单个访问者。

由于cookieless="true" ,因此SessionID将嵌入到所有页面URL中。 缺点是您将得到丑陋的URL,这些URL不太适合SEO(搜索引擎优化),并且访问者肯定不会记得它。 这是使用ASP.NET无cookie会话的网站的示例URL:

http://samplewebsite.com/ (45f8c4zyybphaw2mt3dfgnjk4j)/Home.aspx

粗体部分表示会话ID,用于识别访问者。

您的问题有点含糊。 如果您要在多个服务器上托管一个应用程序,我建议您采用一种方法。 如果一个用户首先以一种mode连接到服务器,而下一个请求由另一种mode处理,该怎么办? 会话状态将不可被其他服务器访问/知道。

关于您的问题, 文档非常清楚。

cookieless不会影响mode 如果不指定mode ,则默认值为InProc 如果cookielesstrue ,则ASP将使用查询字符串。

暂无
暂无

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

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