【Asp.net】cookie知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ght886/article/details/85254616

1. 使用 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地址值
  

2. 加密 Cookie 中的数据

为了避免用户信息被他人窃取, 增强网站的安全性, 通常需要对 Cookie 中的数据进行加密, 加密代码如下:

string data = "对Cookie中的数据加密。";
   Response.Cookies["data"].Value = FormsAuthentication.HashPasswordForStoringInConfigFile(data, "md5");
   Response.Write(Request.Cookies["data"].Value);

3. 使用 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>");
   }
    //在 目标页面 (B.aspx)中, 接收 Cookie 对象传来的值, 并将其显示在界面上, 代码如下:
  
   Label1.Text = Request.Cookies["UserName"].Value.ToString();
  

4. 使用 Cookie 验证用户登录.

使用 Cookie 来验证用户登录, 首先需要将登录信息保存在 Cookie 对象中, 然后读取并验证.
以例为例, 当用户注册时 ( 当然很多情况下也可以是用户退出系统 ), 将用户和用户密码保存在 Cookie 对象中, 代码如下:

   Response.Cookies["SavedLogin"]["UserName"] =txtName.Text.Trim();
   Response.Cookies["SavedLogin"]["UserPwd"] = txtPassword.Text.Trim();
   Response.Cookies["SavedLogin"].Expires = DateTime.Now.AddDays(1);
   Response.Write("<script>alert('注册成功!');location='Default.aspx';</script>");

而当用户登录时, 首先判断 Cookie 对象是否失效, 如果没有失效, 则判断用户输入的信息与 Cookie 对象中保存的信息是否一致, 如果一致, 就进行其他操作. 代码如下:

if (Request.Cookies["SavedLogin"] == null)
   {
   Response.Write("<script>alert('Cookie 失效!');location='Default.aspx';</script>");
  
   }
   else
   {
   if (txtName.Text == Request.Cookies["SavedLogin"]
   ["UserName"].ToString() && txtPassword.Text ==
   Request.Cookies["SavedLogin"]["UserPwd"].ToString())
   {
   Session["UserName"] = txtName.Text.Trim();
   Response.Redirect("NavigatePage.aspx");
   }
   else
   {
   Response.Write("<script>alert('登录失败!')");
   }
   }
  

5. 创建及存取多个键值的 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"];

方法二: 利用索引来取出数据值

扫描二维码关注公众号,回复: 5438971 查看本文章
 string str2=Response.Cookies["CookieName"].Values[1];

方法三: 利用索引键名来取出数据值.

 string str3=Response.Cookies["CookieName"].Values["KeyName"];

6. 遍历 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>");
  

7. 设置 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;
  

8. 删除客户端的 Cookie.

删除客户端的 Cookie 主要是设置指定 Cookies 的有效期, 有以下两种方式.
方法一: 将指定 Cookie 的有效期设置为过去的某个时间. 例如, 设置 Cookie 有效期为当前系统时间的前一天, 代码如下:

 Response.Cookies["myCookie"].Expires=DateTime.Now.AddDays(-1);

方法二: 将指定 Cookie 的有效期设置为最小值 ( MinValue). 当浏览器关闭时, 相关 Cookies 失效. 代码如下:

Response.Cookies["myCookie"].Expires=DateTime.MinValue;

9. 删除多值 Cookie 中的某个值.

使用 Remove方法. 相关代码正下:


 if (txtval1.Text != "" && txtval2.Text != "")
   {
   HttpCookie hc = Request.Cookies["Val"];
   hc.Values.Remove("val2");
   Response.Cookies.Add(hc);
   }
   else
   {
   Response.Write("请先输入变量值!");
  
   }

猜你喜欢

转载自blog.csdn.net/ght886/article/details/85254616