当前位置:  开发笔记 > 后端 > 正文

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

如何解决《适当情况下的ASP.NET状态管理》经验,为你挑选了2个好方法。

在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.

Joel Coehoor.. 15

有很多因素可以影响这一点,所以我不会评论所有这些因素.但这里有一些指示:

ViewState - 当您经常回到同一页面时,这很有用(ASP.Net Webforms实际上强迫您这样做).根据您正在构建的应用程序类型,它的确有多大用处.对于公共互联网站点,应该非常谨慎地使用它.您甚至可能希望在默认情况下将其关闭.对于本地Intranet站点,它是一个很好的工具 - 特别是对于更少,更重的webforms页面.

Query String - 使用此选项可以存储允许用户为页面或进程添加书签所需的状态,并在以后返回.即便如此,您可能希望将其保留为某种哈希值,您可以将其用作数据库查找中的键以避免真正巨大的URL(尽管哈希有自己的问题).此外,很多用户喜欢直接调整你的查询字符串,所以在这里放太多是很危险的.很容易意外地将数据暴露给不应该以这种方式看到它的用户.

Application State - 请记住,这是由所有用户共享的,因此请正确使用.视图计数之类的东西可以在这里.

Cookies - 不要使用cookie来存储用户凭据.它们只是简单的未加密文本文件.使用cookie将密钥存储到会话中(即使在这里,您现在可以使用无cookie会话)以及特定于该用户和浏览器的简单个性化设置.例如,我在工作时的显示器大小与家庭不同,因此将显示大小/布局设置放入cookie中是很好的,因为每台计算机都有设置,但如果其他人读取该设置,则不会损害我的安全性.信息.

现在我想从"查询字符串"部分突出显示这个概念:

您可能希望将其保留为某种哈希,您可以将其用作数据库查找中的键

同样,哈希有自己的问题,但我想指出我列表中的几个项目(包括查询字符串)关于将数据从客户端Web浏览器上传到Web服务器:ViewState,Query String,Cookie和Cross-Page帖子.您希望最小化从客户端移动到服务器的数据.这个概念适用于所有这些,原因如下:

    对于公共互联网站点,从客户端提取数据的速度.即使是宽带连接,通常也会削弱可用于上传的带宽.与可能位于数据库和Web服务器之间的千兆以太网(或更快)连接相比,512Kpbs(在许多领域仍然是典型的宽带上传速率)并不算什么.尽管您可能认为数据库查询速度很慢(而且确实如此),但它仍然可能比等待从客户端到达相同数据更好.

    保持服务器上的数据更便宜,因为您不需要支付将其推送到客户端或从客户端推送所需的带宽,并且带宽通常比服务器硬件的成本高或多.

    它更安全,因为即使客户端的计算机或连接遭到破坏,如果正确完成,所有黑客最初都可以访问的是一个哈希密钥,可能会在他解密时到期.当然,如果做错了,他可以立即直接使用该密钥,所以你仍然需要小心.

所以对于大多数事情,我建议首先在Session中保留一个数据库密钥,然后让代码轻松地从基于该密钥的数据库中提取所需内容.当您遇到瓶颈时,可以通过配置文件找出它们的位置并开始缓存这些页面或控件,或者将该数据/查询结果直接保存在会话中.



1> Joel Coehoor..:

有很多因素可以影响这一点,所以我不会评论所有这些因素.但这里有一些指示:

ViewState - 当您经常回到同一页面时,这很有用(ASP.Net Webforms实际上强迫您这样做).根据您正在构建的应用程序类型,它的确有多大用处.对于公共互联网站点,应该非常谨慎地使用它.您甚至可能希望在默认情况下将其关闭.对于本地Intranet站点,它是一个很好的工具 - 特别是对于更少,更重的webforms页面.

Query String - 使用此选项可以存储允许用户为页面或进程添加书签所需的状态,并在以后返回.即便如此,您可能希望将其保留为某种哈希值,您可以将其用作数据库查找中的键以避免真正巨大的URL(尽管哈希有自己的问题).此外,很多用户喜欢直接调整你的查询字符串,所以在这里放太多是很危险的.很容易意外地将数据暴露给不应该以这种方式看到它的用户.

Application State - 请记住,这是由所有用户共享的,因此请正确使用.视图计数之类的东西可以在这里.

Cookies - 不要使用cookie来存储用户凭据.它们只是简单的未加密文本文件.使用cookie将密钥存储到会话中(即使在这里,您现在可以使用无cookie会话)以及特定于该用户和浏览器的简单个性化设置.例如,我在工作时的显示器大小与家庭不同,因此将显示大小/布局设置放入cookie中是很好的,因为每台计算机都有设置,但如果其他人读取该设置,则不会损害我的安全性.信息.

现在我想从"查询字符串"部分突出显示这个概念:

您可能希望将其保留为某种哈希,您可以将其用作数据库查找中的键

同样,哈希有自己的问题,但我想指出我列表中的几个项目(包括查询字符串)关于将数据从客户端Web浏览器上传到Web服务器:ViewState,Query String,Cookie和Cross-Page帖子.您希望最小化从客户端移动到服务器的数据.这个概念适用于所有这些,原因如下:

    对于公共互联网站点,从客户端提取数据的速度.即使是宽带连接,通常也会削弱可用于上传的带宽.与可能位于数据库和Web服务器之间的千兆以太网(或更快)连接相比,512Kpbs(在许多领域仍然是典型的宽带上传速率)并不算什么.尽管您可能认为数据库查询速度很慢(而且确实如此),但它仍然可能比等待从客户端到达相同数据更好.

    保持服务器上的数据更便宜,因为您不需要支付将其推送到客户端或从客户端推送所需的带宽,并且带宽通常比服务器硬件的成本高或多.

    它更安全,因为即使客户端的计算机或连接遭到破坏,如果正确完成,所有黑客最初都可以访问的是一个哈希密钥,可能会在他解密时到期.当然,如果做错了,他可以立即直接使用该密钥,所以你仍然需要小心.

所以对于大多数事情,我建议首先在Session中保留一个数据库密钥,然后让代码轻松地从基于该密钥的数据库中提取所需内容.当您遇到瓶颈时,可以通过配置文件找出它们的位置并开始缓存这些页面或控件,或者将该数据/查询结果直接保存在会话中.



2> xxxxxxxxxadf..:

国家管理选择

查看状态:

当您需要为将回发给自己的页面存储少量信息时使用.使用ViewState属性提供基本安全性功能.

控制状态:

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

隐藏的字段:

当您需要为将回发到自身或其他页面的页面存储少量信息时,以及安全性不是问题时使用.

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

饼干:

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

请求参数:

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

只有在通过链接请求同一页面或其他页面时,才能使用查询字符串.

服务器端管理选项

申请状态

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

会话状态

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

档案属性

在存储用户会话过期后需要保留的用户特定信息时使用,并且需要在后续访问应用程序时再次检索.

数据库支持

在存储大量信息,管理事务或信息必须在应用程序和会话重新启动后仍然存在时使用.数据挖掘是一个问题,安全性是一个问题.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有