Cookie学习

     Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法。例如,当用户访问站点时,可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问站点时,应用程序就可以检索以前保存的信息。用户访问网站的时候,网站会给用户一个包含过期时间的Cookie,浏览器收到Cookie后就存放在客户端的文件夹下。以后用户每次访问网站页面的时候,浏览器会根据网站的URL在本地Cookie文件夹内查找是否存在当前网站关联的Cookie,如果有的话就连同页面请求一起发送到服务器。

      向客户端浏览求输出Cookie是通过Response对象来完成的,当用户通过浏览器浏览网站时,若存在该网站的相应Cookie则浏览器会将其发送给服务器,服务器通过Request对象来获取Cookie对象。也就是ASP.NET 包含两个内部 Cookie 集合。通过 HttpRequest 对象的 Cookies 集合访问的集合,包含以 Cookie 标头形式由客户端传输到服务器的 Cookie。通过 HttpResponse 对象的 Cookies 集合访问的集合包含一些新 Cookie,这些 Cookie 在服务器上创建并以 Set-Cookie HTTP 响应标头的形式传输到客户端。

      在C#里面通过HttpCookie类来操作Cookie。

      创建一个Cookie并将其写回到客户端

       HttpCookie testCookie=new HttpCookie("firstCookie");//创建一个名为firstCookie的Cookie对象。

       // HttpCookie testCookie=new HttpCookie("firstCookie","value1");//创建一个名为firstCookie的对象并且其只有一个值是"value"

       testCookie.Expires=DateTime.Now.AddDays(1);//设置Cookie的过期时间

       Response.Cookie.Add(testCookie);//将该Cookie输出到浏览器

      /*下面的是创建多值的Cookie*/

      HttpCookie MultiValueCookie = new HttpCookie("cookieTest2");
        MultiValueCookie.Values.Add("key1","value2");
        MultiValueCookie.Values.Add("key2","value3");
        MultiValueCookie.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(MultiValueCookie);

       在服务器端读取Cookie

         HttpCookie SingleValuesCookie=Request.Cookies["cookieTest1"];

          Response.Write(SingleValuesCookie.Value);//输出Cookie的值

          Response.Write(SingleValuesCookie.Expires);//输出Cookie的过期时间

  • 我们发现,所有Cookie的过期时间都不能正常显示。这是因为浏览器返回给服务器的Cookie是不包含过期时间的,而服务器返回给浏览器的Cookie是包含过期时间的。过期时间只对客户端浏览器有意义,对服务器来说没有什么意义。(在此产生一个疑问就是怎么在服务器端判断获取的Cookie已经过期)

          删除Cookie

下面是删除Cookie的操作。

 

protected void btn_DelCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = Request.Cookies["test1"];

    SingleValueCookie.Expires = DateTime.MinValue;

    Response.Cookies.Add(SingleValueCookie);

}

 

如果你想删除所有Cookie,可以遍历删除。

 

protected void btn_DelCookie_Click(object sender, EventArgs e)

{

    foreach (string key in Request.Cookies.AllKeys)

    {

        HttpCookie cookie = Request.Cookies[key];

        cookie.Expires = DateTime.MinValue;

        Response.Cookies.Add(cookie);

    }

}

 

我们始终要记住,服务器不能直接删除Cookie,删除Cookie的操作是浏览器进行的。说是删除,其实是把它的过期时间设置为过去的时间,让Cookie过期。因此,对于删除操作来说有三个步骤。

1.从Request对象中获取Cookie。

2.把Cookie的过期时间设置为过去的时间。

3.把Cookie重新写回Response中。

4.修改Cookie的操作也非常简单。

 

protected void btn_ModifyCookie_Click(object sender, EventArgs e)

{

    HttpCookie SingleValueCookie = Request.Cookies["test1"];

    SingleValueCookie.Value = "修改后的单值Cookie";

    Response.Cookies.Add(SingleValueCookie);

}

 

 

Cookie总结

Cookie虽然是一个简单实用的对象,但是我们也要注意Cookie的工作原理、大小限制以及安全性等,大致可以归纳为以下几点。

  • 存储的物理位置。客户端的Cookies文件夹内。
  • 存储的类型限制。字符串。
  • 状态使用的范围。当前请求上下文的上下文都能访问到Cookie,Cookie对每个用户来说都是独立的。
  • 存储的大小限制。每个Cookie不超过4K数据。每个网站不超过20个Cookie。所有网站的Cookie总和不超过300个。
  • 生命周期。每个Cookie都有自己的过期时间,超过了过期时间后失效。
  • 安全与性能。存储在客户端,安全性差。对于敏感数据建议加密后存储。
  • 优点缺点与注意事项。可以很方便地关联网站和用户,长久保存用户设置。

   

 

 

posted @ 2010-07-16 10:35  雁北飞  阅读(810)  评论(2编辑  收藏  举报