使用客户端选项存储页信息。这些选项往往具有最低的安全性但具有较快的服务器性能,因为对服务器资源的要求是适度的。并且存储多少信息存在一定的客观限制。
以下是 ASP.NET 支持的客户端状态管理选项:
· 视图状态
· 隐藏域
· Cookie
· 查询字符串
视图状态
使用视图状态的优点为:
· 不需要任何服务器资源
· 实现简单
· 增强的安全功能
使用视图状态的缺点为:
· 性能注意事项 由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发布页时的速度可能会减慢,带宽通常是有限的。
· 设备限制 移动设备可能没有足够的内存容量来存储大量的视图状态数据。
原则: |
当您需要存储少量回发到自身的页信息时使用。使用 ViewState 属性可提供具有基本安全性的功能。 |
隐藏域
如果使用隐藏域,最好在客户端上只存储少量经常更改的数据。
使用隐藏域的优点为:
· 不需要任何服务器资源 隐藏域在页上存储和读取。
· 广泛的支持 几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。
· 实现简单 隐藏域是标准的 HTML 控件,不需要复杂的编程逻辑。
使用隐藏域的缺点为:
· 潜在的安全风险 隐藏域可以被篡改。如果直接查看页输出源,可以看到隐藏域中的信息,这导致潜在的安全性问题。您可以手动加密和解密隐藏域的内容,但这需要额外的编码和开销。
· 简单的存储结构 隐藏域不支持复杂数据类型。隐藏域只提供一个字符串值域存放信息。若要存储多个值,必须实现分隔的字符串以及用来分析那些字符串的代码。您可以手动分别将复杂数据类型序列化为隐藏域以及将隐藏域反序列化为复杂数据类型。但是,这需要额外的代码来实现。如果您需要将复杂数据类型存储在客户端上,请考虑使用视图状态。视图状态内置了序列化。
· 性能注意事项 由于隐藏域存储在页本身,因此如果存储较大的值,用户显示页和发布页时的速度可能会减慢。
原则: |
当您需要存储少量回发到自身或另一页的页信息时使用,也可以在不存在安全性问题时使用。 |
Cookie
Cookie 用于在客户端上存储少量经常更改的信息。这些信息与请求一起发送到服务器。
使用 Cookie 的优点为:
· 可配置到期规则 Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。
· 不需要任何服务器资源 Cookie 存储在客户端并在发送后由服务器读取。
· 数据持久性 虽然客户端计算机上 Cookie 的持续时间取决于客户端上的 Cookie 过期处理和用户干预,Cookie 通常是客户端上持续时间最长的数据保留形式。
使用 Cookie 的缺点为:
· 大小受到限制 大多数浏览器对 Cookie 的大小有 4096 字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。
· 用户配置为禁用 有些用户禁用了浏览器或客户端设备接收 Cookie 的能力,因此限制了这一功能。
· 潜在的安全风险 Cookie 可能会被篡改。
原则: |
Cookie 通常用于为已知用户自定义内容的个性化情况。在大多数此类情况中,Cookie 是作为“标识”而不是“身份验证”。因此,通常保护用于标识的 Cookie 的方法是在 Cookie 中存储用户名、帐户名或唯一用户 ID(例如 GUID),然后用以访问站点的用户个性化结构中的信息。 |
查询字符串
查询字符串是在页 URL 的结尾附加的信息。
可以使用查询字符串来通过 URL 将数据提交回您的页或另一页上。查询字符串提供一种维护某些状态信息的简单但有限的方法。
使用查询字符串的优点为:
· 不需要任何服务器资源 查询字符串包含在对特定 URL 的 HTTP 请求中。
· 广泛的支持 几乎所有的浏览器和客户端设备均支持使用查询字符串传递值。
· 实现简单 ASP.NET 完全支持查询字符串方法,其中包含了使用 HttpRequest 对象的 Params 属性读取查询字符串的方法。
使用查询字符串的缺点为:
· 潜在的安全性风险 用户可以通过浏览器用户界面直接看到查询字符串中的信息。
· 有限的容量 有些浏览器和客户端设备对 URL 的长度有 2083 个字符的限制。
原则: |
当您将少量信息从一页传输到另一页以及不存在安全性问题时使用。 只有在请求同一页,或通过链接请求另一页时,才能使用查询字符串。 |