05Web-状态管理
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
微软IT学院
设置页面是否保留视图状态
设置@Page指令或Page的EnableViewState属性 指示当前页请求结束时,该页是否保持其视图状 态以及它包含的任何服务器控件的视图状态 关闭页面的视图状态
<%@ Page EnableViewState="false" %>
protected void Page_Load(object sender, EventArgs e) { Page.EnableViewState = false; }
微软IT学院
Cookie概述
Cookie 是存储在客户端文件系统的文本文件中, 或者存储在客户端浏览器会话的内存中的少量的 数据。 Cookie 是随页输出一起由服务器发送到客户端的 特定于站点的信息 Cookie 可以是临时的(随着浏览器关闭而自动消 失),也可以是永久性的 Cookie 保存在客户端设备上,当浏览器请求某页 时,客户端会将 Cookie 中的信息连同请求信息 一起发送。服务器可以读取 Cookie 的值
将新 Cookie Value 属性将 Cookie 的值作为字符串返回 添加到 Response 对象的 Cookie 集合中
26
微软IT学院
创建和读取持久性 Cookie
创建 Cookie 读取 Cookie 新建 Cookie
HttpCookie objHttpCookie = new HttpCookie(“UserName”,“张三"); objHttpCookie.Expires = Response.Write(Request.Cookies[“UserName“].Value); DateTime.Now.AddMinutes(2); Response.Cookies.Add(objHttpCookie);
页框架提供了 ControlState 属性作为 在服务器往返过程中存储自定义控件数据的方法 控件状态不能被关闭,存储控件状态数据的更可 靠方法【不像视图等可以被关闭】 也是基于隐藏域而工作 往往用于自定义控件,且需要编程写代码才能使 用,难度较大
微软IT学院
隐藏域
隐藏域是一个储存库,直接存储在页中的任何特 定于页的信息,在视图状态、会话状态和 cookie 等方法被禁用或不可用,则可以使用 HiddenField 控件来存储状态值 隐藏域的设置和读取
<system.web> <!----> <pages enableViewState="false"></pages> </system.web>
微软IT学院
演示:设置是否启用视图状态
微软IT学院
<asp:ListBox runat="server" ID="lbViewState"></asp:ListBox> <asp:Button runat="server" ID="Button1" Text="Submit"/> protected void Page_Load(object sender, EventArgs e) { if (this.Page.IsPostBack == false) { this.lbViewState.Items.Add(new ListItem(“Item1")); this.lbViewState.Items.Add(new ListItem(“Item2")); this.lbViewState.Items.Add(new ListItem(“Item3")); } }
微软IT学院
工作原理 Cookie的作用是与Session对象相结合来识别用 户。每当用户开始连接站点时,系统将自动在内 存块中创建一个用户有关的会话状态,同时创建 一个用户的ID存放在浏览器端,与当前的用户惟 一地联系起来。这样,服务器保存了Session, 浏览器保存了Cookie(用户的ID)。当下一次用户 发出请求时,请求的用户将被要求提交用户的ID ,两者对照以正确地还原原来的会话状态。这就 是在无状态协议的HTTP条件下保持用户标志的方 法。
微软IT学院
设置页面是否保留视图状态
关闭控件的视图状态
<asp:GridView ID="GridView1" runat="server" EnableViewState="false"> </asp:GridView>
微软IT学院
在配置文件中设置是否保留视图状态
在配置文件Web.config的system.web节点下,修 改Pages元素的EnableViewState属性,来控制所 有页面是否启用视图状态信息
<asp:GridView ID="GridView1" runat="server“ EnableViewState="false"> </asp:GridView>
微软IT学院
设置页面是否保留视图状态
关闭页面的视图状态
<%@ Page EnableViewState="false" %>
protected void Page_Load(object sender, EventArgs e) { Page.EnableViewState = false; }
13
微软IT学院
后台页
protected void Button1_Click(object sender, EventArgs e) { Label1.Text = “123"; Label2.Text = “123“; TextBox1.Text = “456"; TextBox2.Text = “456“; }
微软IT学院
读取指定的Cookie时的语句如下: HttpCookie cookie = Request.Cookies["Cookie的名称"]; 如果想将读出的Cookie显示出来时, 可以使用以下语句: Response.Write(cookie.Value.ToStr ing());
ViewState["view1"] = "Hello World";
视图状态可存储的数据类型:
字符串 整数 布尔值 Array 和ArrayList 对象 哈希表 自定义类型转换器
微软IT学院
视图的两种使用方式
显式通过viewstate[key]的形式存取 通过设置控件、页面、web.config中的相关缓存
பைடு நூலகம்微软IT学院
创建和读取会话 Cookie
创建 Cookie 读取 Cookie 新建 Cookie
HttpCookie objHttpCookie = new HttpCookie(“UserName”, “张三"); Response.Write(Request.Cookies[“UserName”] Response.Cookies.Add(objHttpCookie); .Value);
Web应用的状态管理 --客户端
微软IT学院
Web应用状态概述
Web应用本质是无状态,如需保存状态则需要做状态管理, 状态维护是对同一页或不同页的多个请求维护状态和页信 息的过程 客户端状态维护技术 视图状态 控件状态 隐藏域 Cookie 查询字符串
微软IT学院
客户端状态维护技术
14
微软IT学院
结论与讨论
textbox例外,无论是否设置,都会保存试图状态 取消视图后,Label1会恢复初始值,故视图是不 针对硬编码的,仅针对动态改变的值 <form enableViewstate="false">即把整个form里 面的控件都设置不保存试图状态 在page部分设置,会针对整个page起作用 在web.config中设置,则对相应的目录起作用 视图对性能有损害,必要时才启用 若需要提高viewstate的安全性,可以
微软IT学院
Cookie
Cookie对象
1、基本概念 Cookie对象也是保存下来作为单个用户共享的状 态,但是这个对象保存的位置与Session不同。 Session被保存在服务器端,而Cookie是保存在浏 览器端的。在Cookie中只能含有较少量的信息, 通常不超过4096个字节(有些较新的浏览器可以达 到8192个字节)。 在客户端的默认存储位置: C:\Documents and Settings\Administrator\Cookies
<pages enableViewState="true" maxPageStateFieldLength="100"> </pages>
经过如上设置后,无需任何其他代码,既可以观 察到隐藏域的个数有所增加 总体而言,这样会导致页面更大。。。
微软IT学院
演示:对视图状态进行分块
微软IT学院
控件状态
<asp:HiddenField ID="h1" runat="server" />
protected void Page_Load(object sender, EventArgs e) { string strUserName = "Jakey"; h1.Value = strUserName; }
微软IT学院
隐藏域
优点
存储于页面,不占服务器资源 实现简单 支持广泛,几乎任何设备和浏览器都支持
缺点
潜在安全风险 仅能存储简单的结构 存储数据量不宜大
20
微软IT学院
Cookie概述 编写Cookie 演示与练习:编写Cookie 编写多值Cookie 演示与练习:编写多值Cookie 控制Cookie的范围 演示与练习:控制Cookie的范围 修改和删除Cookie 演示与练习:删除Cookie和删除多值Cookie的子键 Cookie和会话状态
视图状态 控件状态 隐藏域 Cookie 查询字符串
微软IT学院
视图状态
视图状态概述 设置页面是否保留视图状态 在配置文件设置是否保留视图状态 对视图状态进行分块
微软IT学院
视图状态概述
视图状态(ViewState)是一个字典对象,通过Page类的 ViewState属性公开,是页用来在往返行程之间保留页和 控件属性值的默认方法
//<asp:ListBox runat="server" ID="lbViewState" EnableViewState="false"></asp:ListBox>
12
微软IT学院
前台页
<form id="form1" runat="server"> <div> Label1: <asp:Label ID="Label1" runat="server" Text="取消视图" EnableViewState="false"></asp:Label> Label2: <asp:Label ID="Label2" runat="server" Text="视图状态" EnableViewState="true"></asp:Label> <asp:Button ID="Button2" runat="server" Text="设置值“ onclick="Button1_Click" /> <asp:Button ID="Button3" runat="server" Text="刷新" /> </div> <div> <br /> <asp:TextBox ID="TextBox1" runat="server" EnableViewState="true">视图开启</asp:TextBox> <br /> <asp:TextBox ID="TextBox2" runat="server" EnableViewState="false">视图关闭</asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs " Inherits="Index" EnableViewStateMac="true"%>
15
微软IT学院
对视图状态进行分块
设置页的 MaxPageStateFieldLength 属性,对 ViewState 属性中存储的数据进行分块,可以在 Web.Config文件中设置分块大小