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

时间:2009-03-20 04:52:09

标签: asp.net session

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

8 个答案:

答案 0 :(得分:4)

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

也就是说,我一直在使用年的会话而没有任何重大问题,除了不必担心会话存储一直保持运行。如果您是InProc,则必须担心每次应用程序池重新启动时会话都会被激活,这会导致工作进程内存使用量增加,这是另一个缺点;使用其他方法之一,很高兴能够向网站发布点更新,而不会影响任何客户的当前状态。

(我个人还没有看到扩展会话的问题,即使是在多台服务器上也是如此。但是我再次为小型企业工作[大约3页浏览量/秒]。我想你通常都在和数据库交谈对于某些事情,获取会话的成本是在那个洗涤中。)

所以使用会话并不是一个糟糕的选择,你只需要记住不要被它带走。可以把它想象成一个服务器端的cookie,试图将自己限制在人为的4KB左右。对于现有的应用程序,我当然不打算对它们进行非会话,但总的来说,我现在更喜欢保持简单并尽量不用。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

ASP.NET Session State FAQ这将回答会话vaiables等的积极方面......我试图避免将它们用于某些事情以及其他我使用它们的方式.. 所以答案像这样的问题有所不同

答案 3 :(得分:1)

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

而不是viewstate或querystring,它最适合我遇到的大多数情况。

答案 4 :(得分:0)

我尽量避免会话,但不是因为它对应用程序有害。让我们面对现实吧,有些设计在会议上比试图绕过它们更好。一般来说,我不会将它们用于我可以轻松存储在其他地方的东西。

答案 5 :(得分:0)

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

千电子伏

答案 6 :(得分:0)

如果必须,请使用它们。在小型使用中,它是一种在页面之间传输数据的简单方法,但从不将控件粘贴到会话中,特别是在页面之间,您只是打开自己的受伤世界。

答案 7 :(得分:0)

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

有些东西我无法存储在查询字符串中,有些东西我不希望存储在视图状态中。真正剩下的就是会议。