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