asp.net状态管理学习一:cookie

之前一直觉得自己对ASP.NET状态管理了解的不够深入,今天便安静下来参考了一下MSDN。

1、cookie:

   (1)了解cookie

       我们比较常用,无论做管理系统还是做网站,在用它之前我们应该知道它是什么---Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,说白了就是存在客户端的机器上的一个字符串,当用户请求站点中的页面时应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie,用户的浏览器在获得页面的同时还获得了该 Cookie,并将它存储在用户硬盘上的某个文件夹中。当用户下次再请求原来的页面时,浏览器便会在本地硬盘上查找与该 URL 关联的 Cookie。如果该 Cookie 存在,浏览器便将该 Cookie 与页请求一起发送到您的站点。然后,应用程序便可以确定该用户上次访问站点的日期和时间。您可以使用这些信息向用户显示一条消息,也可以检查到期日期。Cookie 与网站关联,而不是与特定的页面关联。因此,无论用户请求站点中的哪一个页面,浏览器和服务器都将交换 Cookie 信息。用户访问不同站点时,各个站点都可能会向用户的浏览器发送一个 Cookie;浏览器会分别存储所有 Cookie。

(2)什么时候用cookie
      短暂的存储信息,例如购物车信息;信息量小的信息,因为cookie最大支持4096字节。

(3)cookie基本实例

 cookie写法
        //第一种写法
        Response.Cookies["username"].Value = "jack.feng";
        Response.Cookies[
"username"].Expires = DateTime.Now.AddDays(-1);
        
//第二种写法
        HttpCookie acookie = new HttpCookie("username");
        acookie.Value 
= DateTime.Now.ToString();
        acookie.Expires 
= DateTime.Now.AddDays(-1);
        Response.Cookies.Add(acookie);
(4)cookie扩展实例1
为了方便管理cookie本身提供了一个集合的概念就是键值
Response.Cookies["userInfo"]["userName"] = "patrick";
Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "patrick";
aCookie.Values["lastVisit"] = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);
(5)cookie扩展实例2
正常来讲cookie是针对整个网站的,但是cookie本身也提供了一个方法.path属性来限制访问权限。
例如
代码
HttpCookie appCookie = new HttpCookie("AppCookie");
appCookie.Value 
= "written " + DateTime.Now.ToString();
appCookie.Expires 
= DateTime.Now.AddDays(1);
appCookie.Path 
= "/Application1";
Response.Cookies.Add(appCookie);

(6)cookie作用范围

一般来说如果不做特殊设置的话cookie只作用当前域名下例如当前站点时http://www.xxx.com/那么cookie只能在http://www.xxx.com/aa级别或者更深的里面.如果有二级域名的话例如bb.xxx.com和cc.xxx.com的话,就要用到cookie的另一个重要属性cookie的domain属性--关联域

代码如下

Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies[
"domain"].Expires = DateTime.Now.AddDays(1);
Response.Cookies[
"domain"].Domain = "contoso.com"

 

 

那么如何在两个不同域名之间共享cookie呢,那么就要用到单点登录的知识了,我知道的只有通过url把cookie值传递一个字符串过去,一定要是加密后的哈哈.如有其它的好办法,赶紧告诉我~

(7)读取cookie

这个比较简单了.使用page类的request对象,标准写法

if(Request.Cookies["userName"] != null)
    Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

if(Request.Cookies["userName"] != null)
{
    HttpCookie aCookie = Request.Cookies["userName"];
    Label1.Text = Server.HtmlEncode(aCookie.Value);

(8)删除cookie

说是删除cookie其实cookie是删除不了得,这里有个变通的方法就是从新创建一个cookie实例覆盖掉原来的

HtppCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i=0; i<limit; i++)
{
    cookieName = Request.Cookies[i].Name;
    aCookie = new HttpCookie(cookieName);
    aCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(aCookie);
}
 
以上大部分来自MSDN

 

posted @ 2009-12-29 16:53  西门啥都吹  阅读(263)  评论(0编辑  收藏  举报