[英]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或状态服务器的适当位置。
我们可以将某些服务器配置为状态,将某些服务器配置为sql吗?
我们可以有一些无cookie的和有cookie的吗
假设如果仅使用<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
。 如果cookieless
为true
,则ASP将使用查询字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.