APP下载

基于ASP.NET的页面间传值技术探讨

2015-09-11谢生锋

电脑知识与技术 2015年17期
关键词:页面变量

谢生锋

摘要:页面间传值是Web应用程序开发经常用到的功能,由于ASP.NET封装了一些内置对象,因此实现页面间传值的方式有多种。该文分析了URL、Session对象、Application对象和Cookie对象等传值技术,通过实例给出这些传值方式的基本应用,并讨论和比较它们的优缺点及应用范围。

关键词:ASP.NET;页面;传值;变量

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)17-0072-03

The Discussion of Value-passing Technology Between Pages Based on ASP.NET

XIE Sheng-feng

(Computer Department, Henan Mechanical and Electrical Engineering College, Xinxiang 453000, China )

Abstract: Value-passing between pages is often used in web application development, because ASP.Net encapsulate some built-in objects. Therefore, the way of achieving Value-passing between pages are many. This paper analyzes the URL, session object, application object, cookie object and cookie object of Value-passing technology, through examples, it means the value of the basic application, and discusses and compares their advantages,disadvantages and the application scope.

Key words:ASP.NET; pages; value-passing; variable

ASP.NET是微软公司用来开发Web应用程序的一种技术平台,而其中页面传值是ASP.NET技术当中使用最多的功能之一,页面传值分为页内传值和页面间传值,页内传值主要通过ViewState对象来实现,实现页面间传值主要通过ASP.NET中的内置对象来实现,其实现方法有多种,分别是URL传值、Session传值、Cookie传值和Application传值。本文主要深入分析这些页面间传值技术[1]。

1 页面间传值技术

ASP.NET的Web页面间经常需要进行数据传值, 下面以实例研究不同的传值方法及特点。源页面Default1.aspx中两个TextBox中的用户名和邮箱的值通过单击“登录”按钮传递到目标页面Default2.aspx, 并在Default2.aspx 中以两个Label标签显示从源页面接收到的值。两个页面的运行界面如图1和图2和所示:

1.1 使用URL传值

使用URL传递参数是最常见的页面间传值方式,传递参数的URL格式如下:

http://LinkAddress?[参数名称]=[值]&[参数名称]=[值]&[参数名称]=[值]

URL传递参数的URL格式必须遵循下面规则:

1)URL由接收参数页面的URL地址和参数集合两部分组成,参数部分和接收参数页面的URL地址之间用“?”分隔,并且“?”必须是英文里的问号。

2)参数和参数值之间以“=”连接,并且每个参数之间以“&”分隔[2]。

实现页面跳转的方法可以使用超链接和Response对象的Redirect方法来实现。由于实例中的Default1.aspx页面属于动态页面,传递的参数值是变化的,所以在服务器端用Response对象的Redirect方法很容易实现。单击“确定”按钮对应的事件处理程序代码如下:

protected void btnOK_Click(object sender, EventArgs e)

{

string userName = txtName.Text;

string userEmail = txtEmail.Text;

string strUrl = "Default2.aspx?name=" + userName + "&email=" + userEmail;

Response.Redirect(strUrl);

}

当执行URL传递参数后,接收参数的页面Default2.aspx可以使用Request对象的QueryString属性来访问URL参数的值,具体实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{

lbName .Text ="用户名:" +Request.QueryString["name"];

lbEmail.Text = "邮箱:" + Request.QueryString["email"];

}

通过实例可以看到,使用URL传值很方便,但是该方法也有一些缺点:

1)传递参数的值只能是字符串,对数据类型有限制;

2)传递参数的值会在浏览器地址栏里被看到,这样安全性不高;

3)传递参数的值如果包含汉字时,会出现接收到的值丢失几个汉字或者出现乱码。为了确保传递的汉字可以被正确接收,可以在传值之前使用Server对象的UrlEncode方法对所传递的汉字进行URL编码。接收值时,使用Server对象的UrlDecode方法对所接收的汉字进行URL解码。

1.2 Session对象传值

Session是用来存储当前用户的信息,当用户第一次访问Web应用程序时,服务器会自动为每个用户创建一个SessionID,用以标识当前用户的唯一身份[3]。然后根据SessionID可以获取到当前用户的Session对象,由于Session对象是私有的,所以每个用户不可以访问其他用户的Session对象,Session对象的数据可以被同一用户在Web应用程序的一次会话过程共享,并且数据存储在服务器端,因此利用Session对象可以实现页面间传值,安全性也高,存储的数据类型没有限制。实例中Default1.aspx页面的后台代码如下:

protected void btnOK_Click(object sender, EventArgs e)

{ //分别创建名称为name和email的Session对象变量

Session["name"] = txtName.Text;

Session["email"] = txtEmail.Text;

Response.Redirect("Default2.aspx");

}

由于Session对象具有超时时间限制,默认超时时间是20分钟,当Session对象超时后,Session对象保存的数据会被清空。因此在Default2.aspx页面首先判断Session对象中的name变量和email变量的值是否为空,具体实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{ if( Session["name"]!=null&&Session["email"]!=null)

{ lbName .Text ="用户名:" + Session["name"].ToString ();

lbEmail.Text = "邮箱:" + Session["email"].ToString ();

}

}

Session对象可以存储任意类型的参数值,并且每个用户的Session对象是私用的,其存储在服务器端的数据不能被其他用户访问,安全性较高,但是当用户在未超时的情况下关闭浏览器后,Session对象仍在服务端存储,这样攻击者就可能访问服务器端的Session对象来获取用户的信息。因此,使用Session对象要注意用户关闭浏览器时,通过脚本语言JavaScript通知服务器删除相应的Session对象。

1.3 Application对象传值

Application对象用于共享应用程序级信息,多个用户共享一个Application对象。在第一个用户请求ASP.NET文件时,将启动应用程序并创建Application对象。一旦Application对象被创建,就可以共享和管理整个应用程序的信息[4]。在应用程序关闭之前,Application对象将一直存在。所以利用Application对象可以在不同用户之间共享数据。对于实例来说,如果创建两个Application对象变量用来存储用户名和邮箱信息,由于Application对象存储的数据可以被多个用户共享,这样当前用户的信息可以被其他用户获取到,所以Application对象在本实例中的使用是有局限性的。实例中Default1.aspx页面的后台代码如下:

protected void btnOK_Click(object sender, EventArgs e)

{ //分别创建名称为name和email的Application对象变量

Application["name"]= txtName.Text;

Application["email"]= txtEmail.Text;

Response.Redirect("Default2.aspx");

}

Default2.aspx页面的后台代码如下:

protected void Page_Load(object sender, EventArgs e)

{

lbName .Text ="用户名:" + Application ["name"].ToString ();

lbEmail.Text = "邮箱:" + Application ["email"].ToString ();

}

Application对象中的数据存储在服务器端,并且被多个用户所共享,所以在改变Application对象变量值的时候,采用锁定方式,改变之后再进行解锁,供其他用户访问,对应的方法分别为Lock和UnLock。在ASP.NET的Web应用程序中,使用Application对象可以统计在线人数。

1.4 Cookie对象传值

Cookie对象提供了一种存储用户特定信息的方法,当用户访问Web应用程序时,使用 Cookie对象存储用户首选项或其他信息。当该用户再次访问时,应用程序便可以检索以前存储的信息。Cookie对象在客户端存储基于文本形式的用户数据,这样不同的用户只要不在同一台计算机上访问同一Web应用程序,就获取不到Cookie对象存储的用户数据。由于Request和Response对象都提供了一个Cookies集合,利用Response对象向客户端存储Cookies的信息,使用Request对象从客户端读取Cookies的信息。实例中Default1.aspx页面的后台代码如下:

protected void btnOK_Click(object sender, EventArgs e)

{ //分别创建名称为name和email的Cookies对象变量

Response.Cookies["name"].Value = txtName.Text;

Response.Cookies["email"].Value = txtEmail.Text;

Response.Redirect("Default2.aspx");

}

Default2.aspx页面的后台代码如下:

protected void Page_Load(object sender, EventArgs e)

{

lbName.Text = "用户名:" + Request.Cookies["name"].Value;

lbEmail.Text = "邮箱:" + Request.Cookies["email"].Value;

}

使用Cookie对象实现页面间传值具有简单、持久和不需要任何服务器资源等优点,用户可以通过它对登录的客户进行标识,防止用户恶意攻击网站。例如:在线投票时,可以使用Cookie防止用户进行重复投票。但是存储在客户端安全性差,并且每个Cookie对象都有过期时间,或者浏览器禁止Cookie,这都会导致需要Cookie的Web应用程序出现问题,同时每个Cookie存储数据的大小都有限制。

2 结束语

总之,除了本文探讨的上述传值方式,在ASP.NET中还可以使用Cache和Context对象实现页面间传值。无论何种传值方式,都有其优缺点。在实际应用中应具体问题具体分析,从数据的安全性、数据类型和占用服务器资源等方面来考虑,选择合适的传值方式,才能灵活运用这些传值方式,更好的解决实际问题[5]。

参考文献:

[1] 房大伟, 吕双. ASP.NET开发实战1200例[M]. 北京: 清华大学出版社, 2011.

[2] 洪石丹. ASP.NET范例开发大全[M]. 北京: 清华大学出版社, 2010.

[3] 邵珠贵, 杨惠英. 关于ASP.NET网页间数据共享的研究[J]. 吉林广播电视大学学报, 2012(1).

[4] 王艳娟. 浅析ASP.NET页面间传值的几种方式[J]. 黑龙江科技信息, 2012(11).

[5] 范明虎, 樊红. ASP.NET页面间传值综述[J]. 计算机工程, 2009(22).

猜你喜欢

页面变量
刷新生活的页面
抓住不变量解题
也谈分离变量
SL(3,3n)和SU(3,3n)的第一Cartan不变量
分离变量法:常见的通性通法
网站结构在SEO中的研究与应用
浅析ASP.NET页面导航技术