我正在开发一个ASP.NET网站。我想知道在会话状态模式下哪一个更好:InProc或SQL Server?我需要了解你在这个问题上的经历。
另一个问题是关于cookieless属性。如果我将其设置为true,我的网站是否有任何安全漏洞?在我在MSDN站点中看到的所有示例中,此属性都设置为false。
最后一个问题是关于Timeout属性。当我将其设置为InProc模式时,此属性是否影响我的会话生命周期?
答案 0 :(得分:31)
InProc会话速度更快,需求更少(序列化),但在多个Web服务器上运行应用程序时无法使用;
Sql会话速度慢得多,有对象序列化要求,但可以在多个Web服务器之间共享;
这是开发人员应该关心的主要区别。
你应该就此提出一个单独的问题,因为这与前一个问题完全无关。
如果您关闭cookie会话ID处理,您将能够看到会话ID。但是如果你检查一下饼干也可以。这个号码就在那里。
会话cookie过期设置为浏览器会话,因此在持久性方面几乎相同。
如果您知道其他方的会话ID,则会被劫持。当然,如果您使用无cookie会话,则更容易,因为您只需要更改URL ...
复制网址和共享/保存(收藏夹)还有另外一件事。我想我不必解释这个问题。
默认情况下,无Cookie会话为false
,因为绝大多数浏览器都支持Cookie。 只有在您知道客户没有Cookie时才能将其打开。
无论会话类型如何,会话超时始终与会话到期相关。但是,您必须注意,当您使用SQL Express版本时,SQL会话状态可能不遵守此设置,因为您需要SQL Server代理服务来丢弃过期的会话。您可以编写自己的Windows服务来放弃过期的会话,从而缓解此问题。
答案 1 :(得分:15)
您可以通过3种方式使用Session。每一个都有优点和缺点
In-Proc:
会话状态:
Sql Server:
还可以查看这个问题: SQLServer vs StateServer for ASP.NET Session State Performance
答案 2 :(得分:2)
InProc会话状态
InProc会话模式表示会话状态存储在本地,意味着具有InProc会话状态模式
将对象存储在Web应用程序的AppDomain中。因此,IIS(Internet信息系统)重新启动时会话状态将丢失。
通常,AppDomain会根据memoryLimit属性等几个因素重新启动
配置文件部分中的设置,修改Global.asax或Web.config文件等。
我们可以使用StateServer或SqlServer会话状态模式来克服这些问题,这里会话状态不存储在Web应用程序的AppDomain中。
OutProc会话状态
在OutProc会话中,Sessin State存储在StateServer和SqlServer模式中,而不是存储在Web应用程序的AppDomain中。
StateServer:它使用独立的Microsoft Windows服务来存储会话变量,因此这项服务 它独立于IIS,可以在单独的服务器上运行。 您可以将此模式用于负载平衡解决方案,因为多个Web服务器可以共享会话变量。 虽然重新启动IIS时会话变量不会丢失,但跨越进程边界时性能会受到影响。
SqlServer: SqlServer模式还允许您利用位于IIS进程之外的状态存储, 位于本地计算机或远程服务器上。对于会话信息的持久性,您可以使用SqlServer模式 SqlServer模式类似于进程外模式,但会话数据是在SQL Server中维护的。
答案 3 :(得分:-9)
SQL会话是比inproc会话更好的选择