7

session 变量在开发大型 Web 应用程序时有哪些限制。还有什么是会话变量的最佳选择

请为我提供SESSION VARIABLES 的替代方案

4

4 回答 4

19

要了解不使用会话的优点,您必须了解会话的工作原理。

在默认设置中,

  • 会话由用户浏览器中设置的 cookie 标识,并且
  • 会话数据存储在网络服务器的内存中

当用户向服务器发送请求时,会同时发送会话 cookie。它包含一个标识符,服务器使用该标识符来定位该特定用户的会话数据。

您可以将 ASP.NET 配置为

  • 使用查询参数而不是 cookie 来存储会话标识符
  • 将会话数据存储在数据库中(如果您有多个服务器为您的站点提供服务,则拥有一个用于会话数据的中央数据存储尤其重要)

现在为了禁用会话状态的优点:

  1. ASP.NET 通过序列化请求使对会话数据的访问成为线程安全的。这意味着,当启用会话状态时,ASP.NET 拒绝为来自同一用户的并发请求提供服务。当用户的浏览器发出大量 ajax 请求时,这尤其是一个问题。可以通过将不需要更新的请求的会话状态标记为只读来缓解此问题。
  2. 当请求到来时,ASP.NET 必须获取会话数据,并在请求结束时将数据写回。如果会话状态存储在内存中,这可能不是一个大问题,但如果数据存储在中央数据库中,这可能会导致严重的性能问题。

不用说,为大量用户存储大量数据会加剧这些问题。

有关更多信息,请参阅

  1. ASP.NET 会话状态概述
  2. 为您的 Web 应用程序提供快速、可扩展和安全的会话状态管理

(最后一篇文章有​​点过时了,但仍然很好读)。

备择方案

  • 如果可以,请完全避免会话状态。
  • 如果您绝对必须将数据与用户关联,请使用 HTTP 机制并使浏览器在 cookie 或查询参数中携带数据(这部分是整个 REST 运动的内容)。

希望这可以帮助。

于 2013-07-31T12:20:58.263 回答
2

这取决于您的应用程序的业务逻辑,在某些情况下会话可能是最佳选择,但是有很多替代方案,如果您对应用程序的每个请求都有不同的数据,则应使用会话,您可以将数据隐藏字段与你的表格,但你的问题又是一个小问题,你必须分析你的需求而不是根据它你必须决定是使用会话还是其他替代解决方案,如果我必须存储用户的 id我肯定会去参加会议,因为每个用户都会有所不同,我不会在会议中保留非常大的数据,就像在会议中保留很少开发人员所做的数据集一样。如果您使用会话,您希望将其保持在进程中或服务器中,那么也会出现问题,

于 2013-07-31T15:34:35.673 回答
1

会话变量的优缺点见这里

于 2013-07-31T10:21:56.520 回答
0

由于会话状态中的数据存储在服务器内存中,因此在处理大量数据时不建议使用会话状态。会话状态变量会一直留在内存中,直到你销毁它,所以太多的变量会影响内存性能。

会话变量和 cookie 是同义词。因此,如果用户已将其浏览器设置为不接受任何 cookie,则您的 Session 变量将不适用于该特定的网络冲浪者!

当用户访问页面时,每个会话变量都会创建一个实例,并且这些变量会在用户离开页面后持续 20 分钟!(实际上,这些变量会一直持续到它们“超时”为止。这个超时时间是由网络服务器管理员设置的。我见过一些网站,这些变量会在短短 3 分钟内崩溃,还有一些会持续 10 分钟,还有一些会持续坚持默认20分钟。)所以,如果你在Session中放了任何大对象(比如ADO记录集、连接等),你就自找大麻烦了!随着访问者数量的增加,通过在 Session 中放置大型对象,您的服务器将体验到巨大的性能问题!

于 2013-07-31T10:05:18.087 回答