在多 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 服务器
<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 中,sql 或状态服务器的适当位置必须在 web.config 中为农场中的每个 Web 服务器配置。
我们能否将一些服务器配置为状态,一些服务器配置为 sql?
我们可以有一些无cookie和一些有cookie的吗
假设我们只使用<sessionState cookieless="true" />
,那么默认使用哪种模式?这可以在多服务器场中完成,还是必须指定 IP?
你的问题有点含糊。如果您在多个服务器上托管一个应用程序,我建议您坚持使用一种方法。如果一个用户首先连接到一个 mode
的服务器,而下一个请求由另一个用户处理怎么办?会话状态不会是 accessible/known 到其他服务器。
关于你的问题,documentation说的很清楚了。
cookieless
不影响 mode
。如果不指定 mode
,则默认为 InProc
。如果 cookieless
是 true
,ASP 将使用查询字符串。
1.) 我们能否将一些服务器配置为状态,一些服务器配置为 sql?
不,你不应该。假设当用户发出请求时,您网络场中的其中一台服务器会将会话存储在 StateServer 中。现在,如果同一用户发出另一个请求(通过单击某些链接等...),那么如果您的负载均衡器将此请求发送到第二个 Web 服务器会发生什么情况?与您配置 SqlServer 模式相同的用户不会有会话,并且该用户的会话在第一次请求时存储在状态服务器上。
2.) 我们可以有一些 cookieless 和一些 as withcookie 吗?
再次否定,因为与上面指出的理解非常相似。其中一台服务器将使用 cookie 来跟踪会话,另一台服务器将使用无 Cookie(因此 URI)来跟踪同一会话,因此,如果请求被转发到不同的服务器,则不会检测到任何会话。
3.) 假设我们只使用<sessionState cookieless="true" />
,那么默认使用哪种模式?这可以在多服务器场中完成,还是必须指定 IP?
了解此设置:cookieless="true|false"
,仅用于跟踪 特定用户在客户端和服务器端之间的会话。
实际会话 DATA 存储在 SqlServer/State 服务器上,在您的模式设置中定义为:
<sessionState mode="StateServer|SqlServer" ... />
如果您未指定任何 mode
设置,则使用默认值 InProc
。
补充说明:
Cookie 或 URI 有一个与之关联的 SessionID
。 SessionID
是一个唯一的字符串,用于在两次访问网站之间跟踪单个访问者。
作为 cookieless="true"
的结果,SessionID
将嵌入所有页面 URL。缺点是你最终会得到丑陋的 URLs,这对 SEO(搜索引擎优化)不是很好,访问者肯定不会记住它。这是使用 ASP.NET 无 cookie 会话的网站示例 URL:
http://samplewebsite.com/(45f8c4zyybphaw2mt3dfgnjk4j)/Home.aspx
粗体部分代表session id,用于识别访问者。
案例 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 服务器
<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 中,sql 或状态服务器的适当位置必须在 web.config 中为农场中的每个 Web 服务器配置。
我们能否将一些服务器配置为状态,一些服务器配置为 sql?
我们可以有一些无cookie和一些有cookie的吗
假设我们只使用
<sessionState cookieless="true" />
,那么默认使用哪种模式?这可以在多服务器场中完成,还是必须指定 IP?
你的问题有点含糊。如果您在多个服务器上托管一个应用程序,我建议您坚持使用一种方法。如果一个用户首先连接到一个 mode
的服务器,而下一个请求由另一个用户处理怎么办?会话状态不会是 accessible/known 到其他服务器。
关于你的问题,documentation说的很清楚了。
cookieless
不影响 mode
。如果不指定 mode
,则默认为 InProc
。如果 cookieless
是 true
,ASP 将使用查询字符串。
1.) 我们能否将一些服务器配置为状态,一些服务器配置为 sql?
不,你不应该。假设当用户发出请求时,您网络场中的其中一台服务器会将会话存储在 StateServer 中。现在,如果同一用户发出另一个请求(通过单击某些链接等...),那么如果您的负载均衡器将此请求发送到第二个 Web 服务器会发生什么情况?与您配置 SqlServer 模式相同的用户不会有会话,并且该用户的会话在第一次请求时存储在状态服务器上。
2.) 我们可以有一些 cookieless 和一些 as withcookie 吗?
再次否定,因为与上面指出的理解非常相似。其中一台服务器将使用 cookie 来跟踪会话,另一台服务器将使用无 Cookie(因此 URI)来跟踪同一会话,因此,如果请求被转发到不同的服务器,则不会检测到任何会话。
3.) 假设我们只使用<sessionState cookieless="true" />
,那么默认使用哪种模式?这可以在多服务器场中完成,还是必须指定 IP?
了解此设置:cookieless="true|false"
,仅用于跟踪 特定用户在客户端和服务器端之间的会话。
实际会话 DATA 存储在 SqlServer/State 服务器上,在您的模式设置中定义为:
<sessionState mode="StateServer|SqlServer" ... />
如果您未指定任何 mode
设置,则使用默认值 InProc
。
补充说明:
Cookie 或 URI 有一个与之关联的 SessionID
。 SessionID
是一个唯一的字符串,用于在两次访问网站之间跟踪单个访问者。
作为 cookieless="true"
的结果,SessionID
将嵌入所有页面 URL。缺点是你最终会得到丑陋的 URLs,这对 SEO(搜索引擎优化)不是很好,访问者肯定不会记住它。这是使用 ASP.NET 无 cookie 会话的网站示例 URL:
http://samplewebsite.com/(45f8c4zyybphaw2mt3dfgnjk4j)/Home.aspx
粗体部分代表session id,用于识别访问者。