哪个更好,InProc或SQL Server,用于asp.net中的会话状态模式?

时间:2011-12-31 12:20:58

标签: asp.net session-state session-timeout cookieless inproc

我正在开发一个ASP.NET网站。我想知道在会话状态模式下哪一个更好:InProc或SQL Server?我需要了解你在这个问题上的经历。

另一个问题是关于cookieless属性。如果我将其设置为true,我的网站是否有任何安全漏洞?在我在MSDN站点中看到的所有示例中,此属性都设置为false。

最后一个问题是关于Timeout属性。当我将其设置为InProc模式时,此属性是否影响我的会话生命周期?

4 个答案:

答案 0 :(得分:31)

更好的是什么?

  • InProc会话速度更快,需求更少(序列化),但在多个Web服务器上运行应用程序时无法使用;

  • Sql会话速度慢得多,有对象序列化要求,但可以在多个Web服务器之间共享;

这是开发人员应该关心的主要区别。

无Cookie会话

  

你应该就此提出一个单独的问题,因为这与前一个问题完全无关。

如果您关闭cookie会话ID处理,您将能够看到会话ID。但是如果你检查一下饼干也可以。这个号码就在那里。

会话cookie过期设置为浏览器会话,因此在持久性方面几乎相同。

如果您知道其他方的会话ID,则会被劫持。当然,如果您使用无cookie会话,则更容易,因为您只需要更改URL ...

复制网址和共享/保存(收藏夹)还有另外一件事。我想我不必解释这个问题。

默认情况下,无Cookie会话为false,因为绝大多数浏览器都支持Cookie。 只有在您知道客户没有Cookie时才能将其打开。

会话超时

无论会话类型如何,会话超时始终与会话到期相关。但是,您必须注意,当您使用SQL Express版本时,SQL会话状态可能不遵守此设置,因为您需要SQL Server代理服务来丢弃过期的会话。您可以编写自己的Windows服务来放弃过期的会话,从而缓解此问题。

答案 1 :(得分:15)

您可以通过3种方式使用Session。每一个都有优点和缺点

In-Proc:

  • Inproc会话更快。
  • 您可以添加不带序列化的对象
  • 但仅限于一台服务器,如果您的应用程序将运行超过 一台服务器。这对你不起作用
  • 如果发生某些事情,应用程序池将丢失所有会话信息

会话状态:

  • 将作为Windows服务运行
  • 如果您的应用会在多台服务器上运行,这将有助于
  • 添加到Session的对象需要序列化

Sql Server:

  • 使用sql server,但也有Oracle实现
  • 比State 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会话更好的选择