如何在session_start()服务器场中的工作吗?
-
06-09-2019 - |
题
是否在服务器场环境OnSessionStart /在session_start事件仍然只火一次(总),或因为请求是由多个服务器来处理,可以将它火起来一次每个服务器?
ASP.NET / IIS6或7
它应该的不强>假定服务器使用粘性会话。
解决方案
通过IIS的默认安装的答案是“不” - 在在session_start会在一般消防多次。客户端将它击中了每个不同的服务器上创建一个新的会话。同样的事情会发生,如果你使用的是IIS中的Web园选项。
如果你不依赖于会话,你有一个服务器场你平时最好把完全禁用会话状态。这里是你如何做到这一点: http://support.microsoft.com/kb/306996
如果你不依赖于会话您最好的选择可能是ASP.NET状态服务器服务。场中的所有服务器都将使用会话状态的单个服务器,这将确保在session_start只能触发一次。对于大量的背景和细节上的设置阅读(查找“状态服务器模式”,了解具体说明): http://aspdotnetdevs.blogspot.com/2008/12 /aspnet-session-state-and-modes.html
其他提示
除了托马斯:这取决于你的会话状态设置
在web.config中,<sessionState mode="" >
如果您使用mode="InProc"
你会得到多个会话和SessionStart事件,每秒访问服务器1。
在其他模式(StateServer的或SqlServer的),你会得到1次会议和1个SessionStart。你会的不可以获得SESSIONEND事件都没有。
在一个农场,你会使用SQL Server或对场中的所有服务器管理会话状态的状态服务器。它是有这个单个服务器的状态后,看起来比确保OnSessionStart只应调用每个会话一次,没有必要非得总是有所有请求返回到同一台服务器。
使用单个服务器用于维持会话状态的主要缺点是,你不再有OnSessionEnd事件。
我的理解是,一旦一个请求场中达到一个服务器,所有相同的客户端即将请求应被重定向到服务器场中的同一服务器。