首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适当情况下的ASP.NET状态管理

适当情况下的ASP.NET状态管理
EN

Stack Overflow用户
提问于 2009-07-23 01:43:38
回答 4查看 2.6K关注 0票数 15

据我所知,在ASP.NET 3.5中有6种管理状态的技术。

代码语言:javascript
复制
(1) View State
(2) Cross Page Posting
(3) Query String
(4) Session State
(5) Application State
(6) Cookies

有没有人能给我一些适当的例子来说明我应该使用这些技术的情况?

例如:

代码语言:javascript
复制
(*) Session State: Personalization, Buy Cart, etc.
(*) Cookies: Saving User Credentials, etc.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-23 04:55:46

状态管理选项

视图状态:

当您需要为将回发到自身的页面存储少量信息时使用。使用ViewState属性可提供具有基本安全性的功能。

控制状态:

当您需要在与服务器的往返过程之间存储控件的少量状态信息时使用。

隐藏字段:

当您需要为将回发到自身或另一个页面的页面存储少量信息,并且安全性不是问题时使用。

只能在提交给服务器的页面上使用隐藏字段。

Cookie:

当您需要在客户端上存储少量信息并且安全性不是问题时使用。

查询字符串:

在将少量信息从一个页面传输到另一个页面并且安全性不是问题时使用。

仅当通过链接请求同一页或另一页时,才能使用查询字符串。

服务器端管理选项

应用程序状态

当您存储由许多用户使用的不经常更改的全局信息,并且安全性不是问题时使用。不要在应用程序状态下存储大量信息。

会话状态

当您存储特定于单个会话的短期信息且安全性有问题时使用。不要在会话状态下存储大量信息。请注意,将在应用程序中的每个会话的生命周期内创建和维护会话状态对象。在托管许多用户的应用程序中,这可能会占用大量服务器资源并影响可伸缩性。

配置文件属性

当您存储特定于用户的信息时使用,这些信息需要在用户会话过期后保存,并且在以后访问应用程序时需要再次检索。

数据库支持

在存储大量信息、管理事务,或者信息必须在应用程序和会话重新启动后仍然有效时使用。数据挖掘是一个令人担忧的问题,而安全性是一个问题。

票数 5
EN

Stack Overflow用户

发布于 2009-07-23 02:18:31

有很多因素可能会影响这一点,所以我不会对所有这些因素都发表评论。但这里有几点建议:

  • ViewState -当你要频繁地发回同一页(实际上是ASP.Net Webforms强迫你做的事情)时,这是很有用的。它到底有多有用取决于你正在构建的应用程序的类型。对于公共互联网站点,应该非常谨慎地使用它。您甚至可能希望在默认情况下将其关闭。对于本地intranet站点,它是一个很好的工具,特别是对于更少、更重的webforms pages.
  • Query String,使用它来存储您需要的状态,以便允许用户将页面或进程加入书签,并在很长一段时间后返回。即使这样,您也可能希望将其保持为某种散列,以便在数据库查找中用作关键字,以避免非常庞大的url (尽管散列有其自身的问题)。而且,很多用户喜欢直接摆弄你的查询字符串,所以在这里放太多可能是危险的。很容易意外地将数据暴露给不应该看到这个way.
  • Application State的用户-记住,这是由所有用户共享的,所以要正确使用。像查看计数这样的东西可以去here.
  • Cookies -不要使用cookie来存储用户凭据。它们只是普通的未加密的文本文件。使用cookie将密钥存储到会话中(即使在这里,您也可以并且现在应该使用无cookie会话)以及特定于该用户和浏览器的简单个性化设置。例如,我工作时的显示器大小与家里的不同,因此将显示大小/布局设置放入information.

中很好,因为这些设置对每台计算机都有效,但如果其他人读取该cookie,也不会影响我的安全性

现在我想突出显示“查询字符串”部分中的这个概念:

您可能希望将其简化为某种散列,以便在数据库查找中用作关键字

同样,散列也有其自身的问题,但我想指出的是,我的列表中有几个项目(包括查询字符串)谈到了从客户端web浏览器向web服务器上传数据: ViewState、查询字符串、Cookie和跨页面发布。您希望最小化从客户端移动到服务器的数据。这个概念适用于所有这些,并出于以下几个原因:

对于公共互联网站点,

  1. 从客户端拉取数据的速度很慢。即使是宽带连接通常也会削弱可用于上传的带宽。与可能位于数据库和web服务器之间的千兆位以太网(或更快)连接相比,512Kpbs (在许多地区仍然是典型的宽带上传速率)微不足道。尽管你可能认为数据库查询很慢(事实的确如此),但它仍然可能是一种比等待相同数据从client.
  2. Keeping到达的更好的方法。服务器上的数据更便宜,因为你不需要为将数据推送到客户端或从客户端获取数据所需的带宽付费,而且带宽的成本通常与服务器hardware.
  3. It's一样高,甚至更安全。因为如果处理得当,即使当客户端的计算机或连接被泄露时,黑客最初所能访问的只是一个散列密钥,该散列密钥很可能在他可以解密时过期。当然,如果做错了,他可以立即直接使用那个密钥,所以你仍然需要小心。

因此,对于大多数情况,我建议首先在会话中保留一个数据库键,然后编写代码,根据该键轻松地从数据库中提取所需的内容。当您遇到瓶颈时,分析它们的位置并开始缓存这些页面或控件,或者直接将数据/查询结果保存在会话中。

票数 15
EN

Stack Overflow用户

发布于 2009-07-23 02:28:12

不确定您的应用程序状态是否指的是缓存对象。

Cache对象是管理应用程序范围状态的一种很好的方法,例如,记录源和统计对网站的访问(例如,为了防止DDOS攻击)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1169153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档