SESSION VARIABLES的替代品有哪些?

时间:2013-07-31 10:01:53

标签: asp.net asp.net-4.0

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

请提供 会话变量的替代方案

4 个答案:

答案 0 :(得分:18)

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

在默认设置中

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

当用户向服务器发送请求时,将发送会话cookie。它包含服务器用于定位特定用户的会话数据的标识符。

您可以将ASP.NET配置为

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

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

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

    有关详细信息,请参阅

    1. ASP.NET Session State Overview
    2. Fast, Scalable, and Secure Session State Management for Your Web Applications
    3. (上一篇文章有​​点陈旧,但仍然是一本很好的读物)。

      <强>替代

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

      希望这有帮助。

答案 1 :(得分:1)

会话变量的优点和缺点See Here

答案 2 :(得分:1)

这取决于你的应用程序的业务逻辑在某些情况下会话可能是最好的选择,但是有很多选择,如果你为你的应用程序的每个请求提供不同的数据,应该使用Session,你可以发布你的隐藏字段中的数据与您的表单,但再次你的问题是一点点的轨道,你必须分析你的要求,而不是根据你必须决定是否使用会话或一些其他替代解决方案,如果我必须存储id的对于用户而言,我肯定会参加会议,因为每个用户都会有所不同,我不会在会话中保留非常大的数据,例如将数据集保存在少数开发人员所做的会话中。然后,如果你想使用会话或在服务器中使用会话,也会出现问题,如果你在服务器中保存会话这是非常昂贵的,但在ssome场景中它非常有用。

答案 3 :(得分:0)

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

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

当用户访问页面时,会创建每个会话变量的实例,并且这些变量会在用户离开页面后持续20分钟! (实际上,这些变量一直存在,直到它们“超时”。这个超时长度由网络服务器管理员设置。我看到网站变量将在3分钟内崩溃,而其他变量将持续10分钟,还有其他变量默认持续20分钟。)因此,如果你在Session中放置任何大型对象(例如ADO记录集,连接等),你就会遇到严重的麻烦!随着访问者数量的增加,您的服务器将通过在会话中放置大型对象来体验到惊人的性能问题!