Asp.net Cookies用法

-
 创建Cookies

  public void UserCookies()
  {
   if(Request.Browser.Cookies == true)
   {
    if(Request.Cookies["UserLogin"]==null)
    {
     HttpCookie UserCookie=new HttpCookie("UserLogin");
     UserCookie.Value=Txt_Uname.Text;
     UserCookie.Expires = DateTime.Now.AddDays(1);
     Response.Cookies.Add(UserCookie);
     Request.Cookies.Set(UserCookie);
    
    }


   }
  }

退出

   if(HttpContext.Current.Request.Cookies["UserLogin"]!=null)
   {
    HttpCookie UserCookie= Request.Cookies["UserLogin"];
    UserCookie.Expires=DateTime.Now.AddDays(-1);
    HttpContext.Current.Response.Cookies.Add(UserCookie);
   }

判断Cookies是否为空

if(Request.Cookies["adminlogin"]==null)

{

  ....

}

1. Cookie 可以存储哪些值 
   
Cookie 中只能存储个人可识别信息个人可识别信息是指可以用来识别或联系用户的信息例如用户的姓名电子邮件家庭住址等必须强调的是这些可识别信息必须是非机密或重要信息.
  
  
2. 使用 Cookie 对象保存和读取客户端信息 
   
要存储一个 Cookie 变量可以通过 Response 对象的 Cookie 集合语法如下:
   Response.Cookies[varName].Value=
值;
  
   
其中, varName 为变量名.
   
要取回 Cookie, 可以使用 Request 对象的 Cookie 集合并将指定的 Cookie 集合返回语法如下 :
   
变量名=Request.Cookies[varName].Value;
   
以例为例 Cookie 操作客户端 IP. 代码如下:
  
  //
保存客户端信息
  string UserIP = Request.UserHostAddress.ToString();//
获取客户端的IP地址
  Response.Cookies["IP"].Value = UserIP;//
将客户端的IP地址保存在Cookies对象中
  Response.Cookies["IP"].Expires = DateTime.MaxValue;//
设计Cookies的失效期
  
  //
读取
  Response.Write(Request.Cookies["IP"].Value);//
Cookies中读取客户端IP地址值
  
  
 
 3. 加密 Cookie 中的数据
   
为了避免用户信息被他人窃取增强网站的安全性通常需要对 Cookie 中的数据进行加密加密代码如下:
  
  string data = "
Cookie中的数据加密。";
  Response.Cookies["data"].Value = FormsAuthentication.HashPasswordForStoringInConfigFile(data, "md5");
  Response.Write(Request.Cookies["data"].Value);
  
  
  
4. 使用 Cookie 对象在页面之间传值 
   
使用 Cookie 对象在页面之间传值与使用 Session 对象在页面之间传值的方法一样但两者有本质区别Cookie 是存放在客户端的 Session 是存放在服务器端的. Cookie 在使用时还需要配合 Asp.net 内置对象 Request.
  
使用 Cookie 对象传送信息的代码如下:
  
  if (txtName.Text == "A" && txtPassword.Text == "a")
  {
  HttpCookie newCookie = new HttpCookie("UserName");
  newCookie.Value = txtName.Text.Trim();
  Response.AppendCookie(newCookie);
  Server.Transfer("B.aspx");
  }
  else
  {
  Response.Write("<script>alert('
登录失败!');</script>");
  } 
   

6. 创建及存取多个键值的 Cookie 对象 
   
多键值的应用其实是一种 "分类思想把某一类信息存储在一起实现方法是
   
使用 Response 对象可以创建多个数据值的 Cookie, 语法如下:
   Response.Cookies["CookieName"]["KeyName"]="Cookie
中相对索引键的值";
   
例如使用多键值保存用户名与密码代码如下:
  
  
  if (txtName.Text == "A" && txtPassword.Text == "a")
  {
  Response.Cookies["UserInfo"]["UserName"] = this.txtName.Text.Trim();
  Response.Cookies["UserInfo"]["UserPwd"] = this.txtPassword.Text.Trim();
  Response.Redirect("B.aspx");
  
  
  }
  else
  {
  Response.Write("<script>alert('
登录失败!');</script>");
  }
  
   
当发出网页请求时浏览器会将 Cookie 信息发送到服务器在服务器端可以使用 Request 对象来存取 Cookie中的数据值语法格式有以下3种形式.
   
方法一直接取出数据值
   stirng str1=Response.Cookies["CookieName"]["KeyName"];
   
方法二利用索引来取出数据值
   string str2=Response.Cookies["CookieName"].Values[1];
   
方法三利用索引键名来取出数据值.
   string str3=Response.Cookies["CookieName"].Values["KeyName"];
  
  
  7. 遍历 Cookie 集合 
   
此处以实例演示说明如何遍历客户端的 Cookie 对象并将客户端的所有 Cookie 对象的内容值显示出来代码如下:
  
  string[] cookieName, keyName;//
定义两个数组,用来存放名称
  HttpCookieCollection myCookieCollection;//
定义Cookies集合对象
  HttpCookie myCookie;//
定义Cookie对象
  myCookieCollection = Request.Cookies;//
将客户端的Cookie取出
  cookieName = myCookieCollection.AllKeys;//
取得集合中所有的Cookie名称
  for (int i=0; i <= cookieName.GetUpperBound(0); i++)//
对每个Cookie进行循环
  {
  myCookie =myCookieCollection[cookieName[i]];
  Response.Write("
Cookie的名称:"+myCookie.Name +"<br>"+"Cookie的到期时间:"+myCookie.Expires+"<br>");
  Response.Write("
Cookie中所有的内容值如下所示:"+"<br>");//输出Cookie内容
  keyName = myCookie.Values.AllKeys;
  for (int j = 0; j <= keyName.GetUpperBound(0); j++)
  {
  Response.Write(keyName[j]+"
"+myCookie[keyName[j]]+"<br>");
  }
  Response.Write("<hr>");
  
  
  8. 设置 Cookie 变量的的生命周期 
   
虽然 Cookie 对象变量是存放在客户端计算机上但是也不是永远不会消失设计人员在程序中设定 Cookie 对象的有效日期语法如下:
   Response.Cookies["CookieName"].Expires=
日期;
  
   
如果没有指定效期 ( Expires 属性), Cookie 变量将不会被保存当关闭浏览器时, Cookie 变量也会随之消失.
   
这里演示几种设定有效期的方法.
  
  //20
分钟后到期
  TimeSpan ts=new TimeSpan(0, 0, 20, 0);
  Response.Cookies["myCookie"].Expires=DateTime.Now.Add(ts);
  
  //
一个月后到期
  Response.Cookie["myCookie"].Expires=DateTime.Now.AddMouths(1);
  
  //
指定具体有效日期
  Response.Cookies["myCookie"].Expires=DateTime.Parse("2010-10-1");
  
  //
永远不过期
  Response.Cookies["myCookie"].Expires=DateTime.MaxValue;
  
  //
关闭浏览器后过期
  Response.Cookies["myCookie"].Expires=DateTime.MinValue;     
   
  9. 删除客户端的 Cookie 
   
删除客户端的 Cookie 主要是设置指定 Cookies 的有效期有以下两种方式.
   
方法一将指定 Cookie 的有效期设置为过去的某个时间例如设置 Cookie 有效期为当前系统时间的前一天代码如下:
   Response.Cookies["myCookie"].Expires=DateTime.Now.AddDays(-1);  
   
   
方法二将指定 Cookie 的有效期设置为最小值 ( MinValue). 当浏览器关闭时相关 Cookies 失效代码如下:
   Response.Cookies["myCookie"].Expires=DateTime.MinValue;  

   
  10. 删除多值 Cookie 中的某个值 
   
使用 Remove方法相关代码正下:
  
  if (txtval1.Text != "" && txtval2.Text != "")
  {
  HttpCookie hc = Request.Cookies["Val"];
  hc.Values.Remove("val2");
  Response.Cookies.Add(hc);
  }
  else
  {
  Response.Write("
请先输入变量值!");
  
  }    
   
  11. 使用 Cookie 防止网上重复投票
   Cookie
提供了一种在 Web 应用程序中存储用户特定信息的方法例如当用户第一次浏览 Web 站点时, Cookie将会记下用户登录 IP地址Cookie 的有效期内当该用户再次发出浏览此 Web 站点中页面的请示时浏览器就会和服务器交换 Cookie信息识别该用户的身份.
   
这里制作一个简单的程序使用 Cookie 的这个特性防止重复投票.
   
实现方法是将客户端的 IP 地址保存在 Cookie 对象中主要代码如下:
  
  //
判断指定的IP是否已投过票了,如果已经投过了,则弹出提示对话框
  string UserIP = Request.UserHostAddress.ToString();
  int VoteID = Convert.ToInt32(RadioButtonList1.SelectedIndex.ToString())+1;
  //
获取名为userIPCookie对象
  HttpCookie oldCookie=Request.Cookies["userIP"];
  //
判断该Cookie对象是否存在
  if (oldCookie == null)
  {
  UpdateVote(VoteID);
  Response.Write("<script>alert('
投票成功,谢谢您的参与!')</script>");
  //
定义新的Cookie对象
  HttpCookie newCookie = new HttpCookie("userIP");
  newCookie.Expires = DateTime.MinValue;
  //
添加新的Cookie变量IPaddress,值为UserIP
  newCookie.Values.Add("IPaddress", UserIP);
  //
将变量写入Cookie文件中
  Response.AppendCookie(newCookie);
  return;
  }
  
  
   
然后从Cookie中获取客户端的IP地址并判断该IP地址是否已访问过网站如果已访问过则弹出提示框提示用户主要代码如下:
  
  //
Cookie中获取客户端IP地址
  string userIP = oldCookie.Values["IPaddress"];
  if (UserIP.Trim() == userIP.Trim())
  {
  Response.Write("<script>alert('
一个IP地址只能投一次票,谢谢您的参与!');history.go(-1);</script>");
  return;
  
  }
  else
  {
  //
创建 HttpCookie 类型的对象并为它分配名称为userID
  HttpCookie newCookie = new HttpCookie("userIP");
  //
Cookie 的子项赋值,即将客户端IP地址赋给Cookie的子项,并将其命名为IPaddress
  newCookie.Values.Add("IPaddress", UserIP);
  //
设置所有 Cookie失效期
  newCookie.Expires = DateTime.MinValue;
  //
将该 Cookie 添加到 Cookies 集合中
  Response.Cookies.Add(newCookie);
  //Response.AppendCookie(newCookie);
  UpdateVote(VoteID);
  Response.Write("<script>alert('
投票成功,谢谢您的参与!')</script>");
  return;
  }
  
  
  12. 使用 Cookie 实现自动登录 
   
一般网站都会提供自动登录服务简单的说就是你第一次(或某一次)登录成功后在某个时间段内不需要再输入用户名或密码进行登录.
   
这很网站会提供给用户一个选择时间段的服务下面这个演示示例中用户可以在两个星期内登录时不再要求输入密码.
   
代码如下:
  
  
  if (Request.Cookies["UserName"] != null)
  {
  Response.Redirect("B.aspx?UserName=" + Request.Cookies["UserName"].Value);
  }
  else
  {
  if(this.txtName.Text=="A"&&this.txtPassword.Text=="a")
  {
  if (CheckBox1.Checked == true)
  {
  Response.Cookies["UserName"].Value = System.Web.HttpUtility.UrlEncode(txtName.Text);
  Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(14);
  }
  Response.Redirect("B.aspx?UserName=" + System.Web.HttpUtility.UrlEncode(txtName.Text));
  
  }
  else
  {
  Response.Write("<script>alert('
输入出错!')</script>");
  }
  }
  
     
  13. 使用 Cookie 实现单点登录 
   
单点登录( Single Sign On, SSO)是目前比较流行的企业业务整合的解决方案之一简单的说就是每个客户端对每个网站同时只能打开一个这样最大的好处是可以缓解服务器的压力一般在企业网站中较为常见因为门户网站社区博客等希望你打开的越多越好不会设置单点登录.
   
实现同11中的自动登录原理类似此处略.

 

posted on 2011-07-16 01:32  #阿志#  阅读(761)  评论(0)    收藏  举报