asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

详细介绍ASP.NET状态保存方法


发布日期:2023年07月03日
 
详细介绍ASP.NET状态保存方法

ASPNET状态保存分为客户端保存和服务器端保存两种

使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服务器性能因为对服务器资源的要求是适度的但是由于必须将信息发送到客户端来进行存储因此对于以这种方式可以存储多少信息存在一定的客观限制

客户端保存的方式一般有如下

ViewState:

利用场合为在对同一页的多个请求间自动保留值多用于客户端的一些事件典型利用场合为页面信息重置 登陆出错次数统计Grid列排序等

优点不利用服务器端资源实现简单相对高的安全性因为经过哈希计算和压缩并且针对 Unicode 实现进行编码

缺点因为ViewState存储在页面本身所以无法存储较大的值并且通过源文件可以看见其中的值 虽然经过哈希计算和压缩但仍有被篡改的风险

可存储的类型stringintegerboolarrayarr aylisthashtable以及其他可以序列化的类型

HiddenField:

利用场合为存储少量页面 中经常改动的信息多和客户端脚本一块使用典型利用场合为客户端经历一系列验证之后向服务器端回发服务器端从客户端HiddenField中获取值进行处理例如 LeyserHomepage中要删除一项产品需要在客户端弹出确认Form用户确认之后再PostBac k回服务器端进行数据库Delete操作当用户确认要删除时将当前要删除的产品ID存放到一个HiddenField中然后执行 Form()submit回发到服务器端服务器端再从HiddenField获取产品ID值进行数据库操作

优点不使用服务器资源 广泛支持实现简单

缺点安全性不高因为它被包含在页面上进行发送所以可以通过源文件看见他的内容存储结构少仅仅支持stringintegerboolarrayarraylis t等简单的数据结构并且在其上只存放简单的单值若要存放多值需要额外编码存储量少因为它被存储在页面本身所以 无法存储较大的值而且大的数据量会受到防火墙和代理的阻止 注意 使用了HiddenField之后需要回发到服务器进行 处理应该使用Http Post方法而不是Http Get方法(通过URL请求访问)

Cookie:

利用场合为存储少量页面中经常改动的信息典型利用场合为为登陆过的网站保存登陆用户名为用户输入提供方便 还有在一些用户自定义项目上保存用户的个性化设置

优点不使用服务器资源实现简单可配置到期时间

缺点大小受到限制一般浏览器支持的最大的Cookie 容量为字节客户端用户可能会配置为拒绝Cookie安全性保存在客户端的信息可能会被恶意用户修改或者获取所以不应该保存敏感信息持久性保存期限受到客户端的配置影响

Cookie 通常用于 存取已知用户自定义内容的个性化情况在大多数此类情况中Cookie 是作为标识而不是身份验证所以在 Cookie 中只存 储用户名账户名或唯一用户 ID(例如 GUID)并使用它来访问站点的用户个性化结构是足够的了

QueryString:

利用场合为 将信息从一页传递给另一页的最简单的方法

优点不使用服务器资源支持广泛实现简单

缺点安全性因为直接在URL中暴露给用户 所以有被篡改的风险容量有限一般的浏览器都有个字符的限制只有在通过其 URL 请求页时查询字符串才是可行的选择不能从已提交给服务器的页读取 查询字符串

视图状态:需要为将回发到自身的页存储少量信息ViewState 属性的使用将提供具有基本安全性的功能

隐藏域需要为将回发到自身或另一页的页存储少量信息并且不需要较高的安全性 (客户端事件)只能在提交到服务器的页上使用隐藏域

Cookie需要在客户端存储少量信息并且不需要较高的安全性(个性化)

查询字符串 可以将少量信息从一页传输到另一页并且不需要较高的安全性 (页面跳转 )只有在请求同一页或通过链接请求另一页时才能使用查询字符串

服务器端保存方式一般有如下

存储页信息的服务器端选项往往比客 户端选项具有更高的安全性但它们可能使用更多的 Web 服务器资源这可能在信息存储量较大时导致可缩放性问题

Application:

利用场合所有的请求都会需要的 一些共有资源由最先的一个请求率先获取之后拿出来共享其他的请求就不用浪费资源进行再次获取典型利用场合一个股市 Web 站点可能在一天中每 分钟从数据库获取大量的金融股票信息(也许是 MB 的数据)然后将这些信息缓存在应用程序状态中这样所有以后的查找请求都可以在应用程序状态中访问这些信息其结果是极大地提高了每个 请求的性能因为传入的请求不需要跨进程跨计算机或数据库的往返过程

首次Http Get请求

If Not MeIsPostBack Then

先判断Application中是否已経有了缓存

If ApplicationItem(Database) Is Nothing Then

若没有从DataCenter中获取

Dim ds As New DataSet

dsReadXml(ServerMapPath(TestDataxml))

Dim dv As New DataView(dsTables())

拿到之后 缓存到Application方便别的进程Http Get请求复用

ApplicationAdd(DataBase dv)

End If

Dim dv As DataView

dv = ApplicationItem(DataBase)

缓存到Session 方便当前进程的Http Post请求

SessionAdd(DataBase dv)

End If

优点易于实现全局范围

缺点持久性若 保存数据的服务器端进程被强行关闭那么数据就会丢失所以利用Application一定要有保底的策略有的话就使用没有的话就自己拿耗用服务器端的内存

注意因为Application中的数据被多个进程公用所以若需要更新其中的值时需要利用 如下的语句做到独占更新

ApplicationLock()

ApplicationItem(DataBase ) = NewDataBase

ApplicationUnLock()

Session:

利用场合单独的一个进程内部使用存储单独会话的短期的敏感的数据

优点易于实现持久性可以应对IIS重启和辅助进程重启 可在多进程中使用

缺点耗用服务器端的内存

Database:

优点安全性 容量 持久性 可靠性和数据完整性 可访问性 广泛支持

缺点复杂性能

方法 使用场合

应用程序状态 存 储更改不频繁的全局信息这些信息由多个用户使用此时安全性不成为问题不要在应用程序状态中存储大量的信息

会话状态 存储特定于单独会话的短期信息并且需要较高的安全性不要在会话状态中存储 大量的信息在支持许多用户的应用程序中这可能会占用大量服务器资源并影响可缩放性

数据库支持 存储大量信息管理交易或者信息必须可以经受得住应用程序和会话重新启动数据挖掘十分重要并且需要较高的安全性

上一篇:ASP.NET2.0中使用数据源控件之基础知识

下一篇:FlyTreeView for ASP.NET 3.2 破解攻略(2)