在 ASP.NET 3.5 中有 6 种技术来管理状态(据我所知)。
(1) View State
(2) Cross Page Posting
(3) Query String
(4) Session State
(5) Application State
(6) Cookies
谁能给我一些适当的例子来说明我应该使用这些技术的情况?
例如:
(*) Session State: Personalization, Buy Cart, etc.
(*) Cookies: Saving User Credentials, etc.
最佳答案
有很多因素可以影响这一点,所以我不会对所有因素发表评论。但这里有一些提示:
ViewState
- 当您经常回发到同一页面时,这很有用(您实际上是被 ASP.Net Webforms 强制执行的操作)。它到底有多有用取决于您正在构建的应用程序类型。对于公共(public)互联网站点,应该非常谨慎地使用它。您甚至可能希望默认将其关闭。对于本地 Intranet 站点,它是一个很棒的工具——尤其是对于较少、较重的 web 表单页面。 Query String
- 使用它来存储您需要允许用户为页面或进程添加书签并稍后返回的状态。即使这样,您也可能希望将其保留为某种散列,您可以将其用作数据库查找中的键以避免非常大的 url(尽管散列有其自身的问题)。此外,很多用户喜欢直接摆弄您的查询字符串,因此在这里放太多可能会很危险。很容易意外地将数据暴露给不应该以这种方式看到的用户。 Application State
- 请记住,这是由所有用户共享的,因此请适当使用。观看次数之类的内容可以放在此处。 Cookies
- 不要使用 cookie 来存储用户凭据。它们只是普通的未加密文本文件。使用 cookie 将 key 存储到 session 中(即使在这里您也可以并且现在应该使用无 cookie session )和特定于该用户和浏览器的简单个性化设置。例如,我工作时的显示器尺寸与家里不同,因此将显示尺寸/布局设置放入 cookie 中很好,因为这些设置适用于每台计算机,但如果其他人读到它,它不会损害我的安全性信息。 现在我想从“查询字符串”部分强调这个概念:
you might want to keep it down to some kind of hash that you can use as a key in a database lookup
同样,哈希也有自己的问题,但我想指出,我列表中的几个项目(包括查询字符串)是关于将数据从客户端 Web 浏览器上传到 Web 服务器的:ViewState、查询字符串、Cookie 和跨页邮政。您希望最小化从客户端移动到服务器的数据。这个概念适用于所有这些,并且有几个原因:
因此,对于大多数事情,我建议首先在 Session 中保留一个数据库 key ,然后编写代码以根据该 key 轻松地从数据库中提取您需要的内容。当您遇到瓶颈时,分析以找出它们的位置并开始缓存这些页面或控件,或者直接将数据/查询结果保存在 session 中。
关于适当情况下的 ASP.NET 状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169153/