在web应用程序中为什么要使用状体管理呢?因为Web应用程序的通信协议使用了无状态的HTTP协议,无状态也就意味着客户端在向服务器发送请求时页面时,就会重新生成一个新的网页实例,而产生新的实例同时,客户端用户在浏览器中浏览的一些状体就会丢失,为了让用户感觉不到数据的丢失,所以对网页进行状态管理。
状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程。
在Asp.Net中提供了4中状态管理,他们分别是Cookies(临时信息)、Session(会话)、Application、viewState(视图状态)。
Cookies用来存储少量数据,这些数据存储在客户端文件系统的文本文件中或者存储在客户端浏览器会话的内存中,它的安全性不是很高。
既然它的安全性不是很高?为什么还有在网站中使用Cookies状态管理呢?
因为Cookies的保存的少量的数据,可以使用户减少反复操作。例如在用户登录网站时,要输入用户名与密码,Cookies就可以保存输入的用户名与密码的信息,当用户再次登录时,密码和账号就会自动出现。就不需要在重新输入了,方便用户的使用。
在Asp.net中管理Cookies的类是HttpCookies。其中包含了设置、修改于创建Cookie的一系列方法和属性。如下表:
属性名称 | 说明 |
Comment | 获取或设置服务器可添加到Cookie中的注释 |
CommentUrl | 获取或设置f服务器可通过Cookie来提供的URL注释 |
Discard | 获取或设置由服务器设置的丢弃标志 |
Domain | 获取或设置Cookie对其有效的URL |
Expired | 获取或设置Cookie的当前状态 |
Expires | 获取或设置作为DateTime的Cookie过期日期和时间 |
HttpOnly | 确定也脚本或其他活动内容是否可访问此Cookie |
Name | 获取或设置此Cookie的名称 |
Path | 获取或设置Cookie适用于的URL |
port | 获取或设置Cookie适用于的TCP端口列表 |
Secure | 获取或设置Cookie的安全级别 |
TimeStamp | 获取或设置Cookie作为DateTime发出的时间 |
Value | 获取或设置Cookie的Value |
Version | 获取或设置此Cookie符合的HTTP状态维护版本 |
下面通过简单的例子实现Cookie的数据存储
代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
//使用集合方式保存用户名
Response.Cookies["UserName"].Value = TextBox1.Text;
//设置用户名保存的过期时间为距现在1小时
Response.Cookies["UserName"].Expires = DateTime.Now.AddHours(1);
//使用创建对象的保存用户密码
HttpCookie myCookie = new HttpCookie("UserPwd");//实例化Cookie对象
myCookie.Value = TextBox2.Text;//保存值
myCookie.Expires = DateTime.Now.AddHours(1);//设置过期时间
Response.Cookies.Add(myCookie);//添加到Cookie集中
Response.Write("保存成功");
}
protected void Button2_Click(object sender, EventArgs e)
{
//遍历浏览器中的所有Cookie
string tempValue = "";
string str;
ListItem item;
//遍历请求中的Cookie集合
foreach (string key in Request.Cookies.AllKeys )
{
if (key=="UserName")
{
TextBox1.Text = Request.Cookies[key].Value;
}
if (key=="UserPwd")
{
TextBox2.Text = Request.Cookies[key].Value;
}
}