【问题标题】:Should I use ASP.NET sessions or avoid them and why?我应该使用 ASP.NET 会话还是避免它们,为什么?
【发布时间】:2009-03-20 04:52:08
【问题描述】:

我应该使用 ASP.NET 会话还是避免它们?为什么?

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    对于新应用程序,I try to avoid them 更喜欢加密或签名的 cookie。诚然,这只是一个新发现的个人偏好:仅仅因为它是另一件要打破的事情,并且在努力保持网站 24/7/365 运行两年后,这是唯一一件令人头疼的事情,神秘的方式。也很容易忘记在您的对象上添加 [Serializable] 并在它们尝试存储在进程外会话中时观看它们在运行时爆炸。因此,可以这么说,这是另一种磨合。

    也就是说,我使用会话已经 没有任何重大问题,只是不必担心会话存储始终保持正常运行。如果您是 InProc,则必须担心每次应用程序池重新启动时会话都会被破坏,这可能会导致工作进程内存使用量激增,这是另一个缺点;使用其他方法之一,能够向网站发布点更新并且不影响任何客户的当前状态是很好的。

    (我个人没有看到扩展会话的问题,即使在多台服务器上也是如此。但我又为一家小企业工作 [大约 3 页面浏览量/秒]。我认为您通常是在与数据库交谈对于某些东西,获取会话的成本就是这样。)

    因此,使用会话并不是一个糟糕的选择,您只需要记住不要被它冲昏了头脑。把它想象成一个服务器端的 cookie,试图将自己限制在一个人为的 4KB 左右的障碍内。对于现有的应用程序,我当然不会费心取消会话,但总的来说,我现在更喜欢保持简单并尽量不用。

    【讨论】:

    • InProc 会话可以很好地扩展。我们运行共享主机箱,每个站点有大约 1200 个站点和共享应用程序池,并且会发生各种会话滥用,但我们从未真正遇到任何问题。您关于应用程序池重置的观点非常有效。
    【解决方案2】:

    对于 Intranet 应用程序,我使用它们(但实际上并不多)。

    对于外部应用程序,如果需要,请使用它们,但前提是您只有一个服务器。

    对于拥有大量用户的大型应用程序以及代理平衡器背后的多个 Web 服务器,您可能应该开始考虑如何构建您的网站以避免使用它们。我个人会使用的最佳选择是将加密数据存储在用户 cookie 中。

    【讨论】:

      【解决方案3】:

      ASP.NET Session State FAQ 这将回答具有会话变量等的积极方面......我尽量避免它们用于某些事情和其他我使用它们的事情..所以回答一个问题像这样变化的

      【讨论】:

        【解决方案4】:

        我经常使用会话变量,但不适用于大型对象。会话变量的问题是您在完成工作时可能会忘记清除它们,您可以在代码中的任何地方硬编码它的关键。由于这些原因,我将会话变量封装在一个我称为会话变量的对象中。并通过它访问它们。当我需要清除它们时,我会在我的对象中定义一个方法来清除会话中的所有变量。

        它最适合我遇到的大多数情况,而不是视图状态或查询字符串。

        【讨论】:

          【解决方案5】:

          我尽量避免会话,但不会影响应用程序。让我们面对现实吧,有些设计通过会话比试图规避它们更好。但总的来说,我不会将它们用于我可以轻松存储在其他地方的东西。

          【讨论】:

            【解决方案6】:

            如果需要,请使用它们。在小范围内,它是一种在页面之间传输数据的简单方法,但永远不要将控件粘贴到会话中,尤其是在页面之间,您只会将自己打开到一个受伤的世界。

            【讨论】:

              【解决方案7】:

              我经常将它们用于小对象,但随着时间的推移,我最终构建了一个位于会话顶部的简单层,它处理诸如清除会话和转换为正确类型、管理密钥等事情。这也阻止了冲突的发生。

              有些东西我不能存储在查询字符串中,有些东西我不想存储在视图状态中。真正剩下的就是会话。

              【讨论】:

                【解决方案8】:

                ASP.NET 的会话管理很好,所以不要试图避免使用它来为自己背锅。 ASP.NET 的会话management capabilities 可以很好地扩展以根据您的需要提供许多不同的解决方案。您还应该关注Microsoft's Velocity 项目。

                凯夫

                【讨论】:

                  猜你喜欢
                  • 2011-07-10
                  • 1970-01-01
                  • 2020-03-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-03-10
                  • 1970-01-01
                  相关资源
                  最近更新 更多