ASP.net ASP.net 企企企企企企企 企企企企企企企 信信信信信 信信信 :
Mar 19, 2016
ASP.net ASP.net 企业级应用开发企业级应用开发信息工程系:罗明刚
第六章Application 、 Session和 Cookie 对象
3
回顾传递 Form表单中的控件值用 Request.Form 获取值 ,地
址栏中传递的参数用 Request.QueryString获取通常用 HttpResponse 类的属性
Buffer、 Cache、 Cookie 和 Expires来设置站点的一些特性
HttpResponse 类常用方法是 Write()、 End() 和Redirect()
HttpServerUtility 类的 Execute()和 Transfer()的区别关键在于执行后控制权是否返回原先页面、 URLEncode()和HTMLEncode()主要用于对 HTML 标签和 URL进行编
码,对站点或程序的安全具有重要意思, MapPath()获取物理路径时需要注意是绝对路径还是相对路径
4
目标 运用 Global.asax 文件 使用 Application 对象 创建并读取 Cookie 使用 Session 对象
5
ASP.NET 中数值传递模型介绍
6
Global.asax 2-1
“Global.asax”
存储所有事件的事件处理程序 存储在应用程序的根目录下 它的位置定义应用程序的限界
包含所有应用程序的配置设置
7
Global.asax 2-2
httpApplication类实例
事件事件处理程序
Global.asax
配置设置存储于
文件事件 说明Application_Start
调用当前应用程序目录(或其子目录)下的第一个ASP.NET 页面时触发。
Application_End 应用程序的最后一个会话结束时触发。用 Internet 服务 管理器管理单元停止 Web 应用程序时也会触发
Application_BeginRequest
每次页面请求开始时触发(理想情况下是在页面加载或刷新时)Application_EndR
equest每次页面请求结束时(即每次在浏览器上执行页面时)触发
Session_Start 每次新的会话开始时触发Session_End 会话结束时触发。(关于会话可以采用何种方式结束,请参见会话对象)
8
TestingGlobal.aspx 示例 4-1
<script language=“C#” runat=“server"> protected void Application_Start(Object sender, EventArgs e)
{}
protected void Session_Start(Object sender, EventArgs e)
{Response.Write( “ 会话已开始 <br>");
} protected void Application_BeginRequest(Object sender, EventArgs e)
{ Response.Write(“<h1> 应用程序开始 </h1>");
Response.Write (“ 应用程序请求开始 <br>");}
Global.asax 文件
打开代码隐藏类文件 Global.asax.cs 。将代码分别添加到 Global.asax.cs 中的各个事件中
9
TestingGlobal.aspx 示例 4-2
protected void Application_EndRequest(Object sender, EventArgs e){ Response.Write (“ 应用程序请求结束 <br>");}
protected void Session_End(Object sender, EventArgs e){
Response.Write(“ 会话已结束 ");}
protected void Application_End (Object sender, EventArgs e){}
</script>
10
TestingGlobal.aspx 示例 4-3
private void Page_Load(object sender, System.EventArgs e){
Response.Write(“ 页面加载事件 <br>");}
将默认 ASP.NET 页面‘ WebForm1.aspx’ 重命名
为‘ TestingGlobal.aspx’ , 并添加给定的代码片段
11
TestingGlobal.aspx 示例 4-4
会话尚未结束 输出结果
12
Application 对象存储并维护应用程序级的数据
Application 对象
Application 状态HttpApplicationState
方法集合
Application 状态 由它们表示
类
13
Application 变量变量用于在应用程序执行时存储数据
应用程序级会话级
string myname = “ 张三 ";Response.Write (“ 欢迎 " + myname);
14
对象级变量 3-1
protected void Application_Start(Object sender, EventArgs e){
Application.Lock ();Application["UserNum"] =0;Application.UnLock();
}
protected void Session_Start(Object sender, EventArgs e){
Response.Write(" 调用 Session_Start :会话已开始 <br>");
Application.Lock();Application["UserNum"]=int.Parse(Application["UserNum"]
. ToString())+1;
Application.UnLock();}
protected void Session_End(Object sender, EventArgs e){ Response.Write(" 调用 Session_End :会话已结束 "); Application.Lock(); Application["UserNum"]=int.Parse(Application ["UserNum"].ToString())-1; Application.UnLock();}
15
对象级变量 3-2
private void Page_Load(object sender, System.EventArgs e){
// 在此处放置用户代码以初始化页面Response.Write(" 你是第 "+ Application["UserNum"].ToString()
+ " 位访客 <BR>");}
16
对象级变量 3-3
17
Lock 和 Unlock 方法 Lock()
Lock() 用于防止用户更改 Application 对象的属性
Lock() 可用作 Application.Lock()
UnLock()
Unlock() 方法用于释放对应用程序变量的锁定
UnLock() 可用作Application.UnLock()
18
向应用程序添加、更新和移除项 方法 说明
Add()
向 Application 状态添加新对象。例如,下列代码会向应用程序状态添加项: Application.Add(“Title”, article board) ;或 Application(“Title”) = “Article Board”;
Clear() 从 Application 状态中移除所有对象 Remove() 从 Application 集合中按名称移除项。例如,下列代
码移除 Title 项: Application.Remove("Title")
HttpApplicationState 方法
Application 对象还提供 Get() 和 Set() 方法,可用于按名称或索引获取对象,并相应地更新对象的值
19
Cookies
Cookie 在客户端系统中维护客户的个人信息
会话 Cookie
持久性 Cookie
………
20
创建和读取会话 Cookie
HttpCookie objHttpCookie = new HttpCookie(“UserName”, “ 张三 ");
Response.Cookies.Add(objHttpCookie);
新建 Cookie
将新 Cookie 添加到 Response 对象的 Cookie 集合中
创建 Cookie
读取 Cookie
Response.Write(Request.Cookies(“UserName").Value);
Value 属性将 Cookie 的值作为字符串返回
21
创建和读取持久性 Cookie
读取 Cookie
HttpCookie objHttpCookie = new HttpCookie(“UserName”,“ 张三 ");
objHttpCookie.Expires = DateTime.Now.AddMinutes(2);Response.Cookies.Add(objHttpCookie);
新建 Cookie
用 Cookie 的 Expires 属性将 Cookie 的过期期限设置为两分钟
创建 Cookie
Response.Write(Request.Cookies(“UserName").Value);
22
Session 对象Session 对象用于存储用户的信息 当新用户请求应用程序的网页时, Server 对象会检查用户是否有 SessionID
Session 对象包含特定于某个用户的信息在用户会话期间可以记录和监视特定于用户的信息当会话过期或终止时,服务器就会清除 Session 对象
优点
23
Session 变量Session 变量与 application 变量不同Session 变量仅提供给会话中的特定用户Session 变量可用于存储在整个用户会话过程中都可以访问的值
24
private void btnLogin_Click(object sender, System.EventArgs e){ if(this.txtName.Text.Trim()!="" || this.txtPwd.Text.Trim()!="") { if(this.txtName.Text==" 张三 " && this.txtPwd.Text== "123456") { Session["UserName"]=this.txtName.Text.Trim(); Response.Redirect("SessionVariableWelcome.aspx?pwd=" +this.txtPwd.Text ); } else { Session["UserName"]="";
RegisterStartupScript("Check","<Script language=‘JavaScript’>alert(‘ 用户名或密码不对,请检查! '); </Script>"); } } else { Session["UserName"]=""; }}
25
使用示例 3-2
private void Page_Load(object sender, System.EventArgs e){
if(Session["UserName"].ToString().Trim()!=""){ Response.Write ("<Script
language=JavaScript>alert(' 欢迎 "+Session["UserName"] + " 光临 , 你的密码是: "+Request["pwd"].ToString()+"')</Script>");
}else{ Response.Redirect("SessionVariableNew.aspx");}
}
26
使用示例 3-3
27
Session 事件Session_Start
当新用户访问一个应用程序时会激活该事件Session_End
用户退出应用程序时,就会触发 Session_End 事件
28
Session 属性
Session 事件Session_Start
Session_End
属性 说明SessionID 包含一个唯一的用户会话标识符。它用于在会话过程中跟踪用户的
信息。要检索 SessionID ,使用 Session.SessionID
TimeOut
设置用户超时,即它以分钟为单位指定 Session 对象在释放资源之前能够保持闲置的时间。用户可导航至另一个站点而不用关闭该应用程序。如果设定了超时属性,则无人操作的用户会话可被清除, 由此释放服务器的资源。默认值为 20 分钟。可通过在 ASPX 文件中赋值来更改此设置。例如, <% Session.Timeout = 10 %>
LCID 用于设定本地标志符 . 它可存储本地信息,如日期、货币和时间格 式。例如 Session.LCID = 0x040C 将本地标识符设定为法国本地标识符
IsNewSession 若该会话是由当前请求创建的,该属性将返回值 true
Item 获取或设置会话值的名称Count 获得会话状态集合中的项数
29
总结Global.asax 文件包含常用的
Application_Start、 Application_End、 Session_Start、 Session_End等事件
Application 对象是存储于服务器的全局变量Cookie 存储信息于客户端Session 对象用于在服务器端存储用户的信息,在用户结束会话时被清除
新用户访问应用程序时会激活 Session_Start 事 件,而用户退出应用程序时会触发 Session_End
事件