页面传值
QueryString
他可以将传送的值显示在浏览器的地址栏中。
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
优点
- 使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
缺点 - 缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
- 不能传递对象。
Request.Form
- Request.Form 获取窗体变量集合。有两重载,即Request.Form[string
name]和Request.Form[int index]。 - 获取表单指定名字的参数值(form表单中的method中一般用post)
Session
- 作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
- 当客户端向服务器发送一个请求时,如登陆用户ID,服务器接收到该请求,服务器端Session产生一个与该登陆用户相关的SessionID,并将SessioID返回给客户端,在新会话开始时,服务器将SessionID当做
cookie存储在用户的浏览器中。
使用方法:
1.在源页面的代码中创建你需要传递的名称和值构造Session变量:
Session["Name"]="Value(或 object)";
2.在目的页面的代码使用Session变量取出传递的值。
Result = Session["Name"]
session不用时可以销毁它,销毁的方法是:
清除一个:Session.Remove("session名");
清除所有:Session.Clear();
优点
- 使用简单,不仅能传递简单数据类型,还能传递对象。
- 数据量大小是不限制的。
缺点 - 在Session变量存储大量的数据会消耗较多的服务器资源。
- 容易丢失。
Cookie
Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。
Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
使用方法:
创建cookie
HttpCookie cookie = new HttpCookie("UserInfo");//创建多值cookie
cookie.Expires = DateTime.Now.AddDays(1);//设置cookie的失效时间为一天,如果不设置失效时间,cookie会在浏览器关闭即消失,不会保存本地文件
cookie.Values["LoginName"] = txtusername.Text;
cookie.Values["Pwd"] = txtusername.Text;
这样创建了一个key为UserInfo的cookie,具有LoginName和Pwd两个属性。
创建为cookie不要忘记添加cookie,否则是取不出来的
Response.Cookies.Add(cookie);
注:如果使用response.Cookies创建cookie就不用写上一句代码了。
取cookie
HttpCookie cookies = Request.Cookies["UserInfo"];//取cookie
txtusername.Text = cookies.Values["LoginName"];//取cookie的LoginName属性 赋值给帐号文本框
txtpass.Attributes.Add("value",cookies.Values["Pwd"]);//密码框不能直接赋值,使用添加属性可以赋值
Session与Cookie配对使用,Session在服务器端产生SessionID,并将该SessionID返回给客户端,客户端Cookie来存储该SessionID,整过会话过程中,只要保存SessionID的Cookie不丢失,则Session的信息就不会丢失。
优点
1、Cookie易于使用和实现
实现cookie的使用要比任何其他Internet协议容易得多。
2、占用更少的内存
不需要任何服务器资源,并存储在用户的计算机上,因此不会给服务器带来额外的负担。
3、持久性
Cookie最强大的一个方面就是持久性。当在客户端的浏览器上设置Cookie时,它可以持续数天,数月甚至数年。这样可以轻松保存用户首选项和访问信息,并在用户每次返回站点时保持此信息可用。此外,由于Cookie存储在客户端的硬盘上,因此如果服务器崩溃,它们仍然可用。
4、 透明性
Cookie透明地工作,用户不知道需要存储的信息。
5、易于管理
大多数浏览器都可以让用户轻松清除浏览历史记录。只需转到工具,清除历史记录并选择Cookie即可。
Cookie存储在用户硬盘驱动器上的cookie.txt下的文本文件中,因为它是一个文本文件,我们可以使用任何查看器或文本编辑器来显示,编辑和删除它们。
缺点
1、隐私问题
大多数用户主要关心的是隐私。启用Cookie的Web浏览器会跟踪您访问过的所有网站。这意味着,经许可(或不在Google的情况下),第三方可以访问这些cookie存储的信息。在某些情况下,这些第三方可以是广告商,其他用户。。。。
2、不安全
Cookie安全性是一个大问题,因为它们是以明文形式存储,可能会造成安全风险,因为任何人都可以打开并篡改cookie。
Cookie容易在客户端被发现意味着它们很容易被黑客入侵和修改。
3、难以解密
我们可以手动加密和解密cookie,但由于加密和解密所需的时间,它需要额外的编码并影响应用程序性能。
4、大小有限制,只能储存简单字符串信息
cookie文本的大小(一般为4kb),cookie的数量(一般每个站点20个)存在一些限制,每个站点只能容纳20个cookie。
Cookie仅限于简单的字符串信息,他们无法存储复杂的信息。
5、可以被禁用
用户可以选择从浏览器设置中禁用其计算机上的cookie。这意味着用户可以决定不在他的浏览器上使用cookie,这可能会在浏览器的运行中产生一些问题。
6、可以被删除
用户可以从其计算机中删除cookie,这使他们可以更好地控制cookie。
Application
使用方法
在源页面的代码中创建需要传递的名称和值构造Application变量;
Application["name"] = Label1.Text; //Label1为控件ID
在目的页面的代码使用Application变量取出传递的值;
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
优点
使用简单,可以传递数据与对象;
缺点
Application是作为全局变量进行传值,所以容易被误操作;
Server.Transfer
使用方法
在源页面的代码中,使用Server.Transfer跳转到目的页面传递页面数据;
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("WebForm1.aspx");
}
在目的页面中,使用Context.Handler来接收数据;然后用formerPage的属性和方法来获取前一个页面的值;
private void Page_Load(object sender, EventArgs e)
{
WebForm newWeb; //实例化WebForm窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
优点
直接在服务器端重定向,使用简单方便;
缺点
可能出现指向性Bug问题,导致网站的图片等出错;