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

Ali*_*ghi 23 asp.net session-state session-timeout cookieless inproc

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

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

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

Rob*_*nik 31

更好的是什么?

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

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

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

无Cookie会话

你应该问一个单独的问题,因为这是一个完全不相关的问题.

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

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

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

复制URL和共享/保存(收藏夹)还有另外一件事.我想我没有必要解释这个问题.

false默认情况下,无Cookie会话是绝大多数浏览器都支持cookie.只有在您知道客户没有cookie时才能打开它.

会话超时

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

  • 使用InProc会话状态是单个Web服务器好得多.这是默认配置,因此您无需显式设置任何内容.之后我也回答了你的最后一个问题. (2认同)

adt*_*adt 15

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

In-Proc:

  • Inproc会话更快.
  • 您可以在没有序列化的情况下添加对象
  • 但是,如果您的应用程序将在多个服务器上运行,则仅限于一台服务器.这对你不起作用
  • 如果应用程序池出现问题,您将丢失所有会话信息

会话状态:

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

Sql Server:

  • 使用sql server,但也有Oracle实现
  • 比State Server慢
  • 更可靠

还可以看看这个问题: SQLServer vs StateServer for ASP.NET Session State Performance

  • 如果您的服务器场在路由器的网络配置中启用了"服务器关联",则In-Proc不限于一个服务器设置.这意味着当您连接到站点时,您将在每个请求上绑定到该服务器. (2认同)