Cookie的小知识

Cookie
Cookie是保存在客户端的名称/值的字符串对。当前浏览器从服务器响应中接收到Set-Cookie Http头时,就会设置Cookie,稍后如果请求的URL与该Cookie相关的Path以及domain的

限制匹配时,浏览器会将该Cookie发送回服务器。
设置会话Cookie:
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    this.Response.AppendCookie(cookie);
}
上面的Cookie,因为没有设置过期时间,这个Cookie会一直保持到浏览器关闭。
在JavaScript创建Cookie:
function SetCookie(name,value){
    document.cookie = name +'='+escape(value);
}
单个Cookie中多个名称/值对:
HttpCookie cookie = new HttpCookie("name");
cookie.Vlaues["V1"] = "va1";
cookie.Vlaues["V2"] = "va2";
创建会生成一个单独的Cookie,保存形式:name=v1=va1&v2=va2
Cookie属性
除了名称/值对外,Set-Cookie http头还支持各种属性,这些属性会影响浏览器对Cookie的处理方式。
1、expires,该属性包含一个时间,告诉浏览器它应该保存这个Cookie多长时间 ,后期之后,浏览器就会删除这个Cookie。
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    cookie.Expires = DateTime.Now.AddYears(1);
    this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,minutes){
    var exp = new Date(new Date().GetTime()+minutes*60000);
    document.Cookie = name + '=' + escape(value) +';expires='+exp.ToGmtString();
}
要删除Cookie,只要设置对应Cookie的expires属性即可,设为过去的时间。
2、path该属性是区分大小写的字符串,为了让浏览器能将Cookie发送给服务器,path属性必须以url的domain路径开始,path不仅仅可以设置为文件夹名称。设置path的url必须指

定的path属性字符串开始,以便匹配该属性。
举例:Http://www.cnblogs.com/ch03/page.aspx有效的path设置包括:
/ 、/ch 、/ch03 、/ch03/ 以及 /ch03/page
如果你的目的是将path指定为文件夹名,那么path应该以斜线结尾。
浏览器为相同的域名保存多个名称相同的path不同的Cookie,因此有可能会接受到多个相同名称的Cookie,要消除歧义并不容易,因此Cookie属性,比如path不会在Cookie中返回

服务器中。
默认的path是/,意思是改域名下的所有的url,浏览器都会发送Cookie给服务器。
要设置path属性,确保path限制作用:
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    cookie.Path = "/ch03/";
    this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,path){
    document.Cookie = name + '=' + escape(value) +';path='+path;
}
3、domain该属性告诉浏览器哪一个域名与Cookie相关联,如果需要设置Cookie让其对多个子域名可见,那就可以使用这个属性。
对请求的url使用EndsWith()匹配比较domain属性值,相匹配则Cookie可见:
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    cookie.Domain = ".cnblogs.com";
    this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,dom){
    document.Cookie = name + '=' + escape(value) +';domain='+dom;
}
4、HttpOnly改属性告诉浏览器该Cookie对Javascript不可见
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    cookie.HttpOnly = true;
    this.Response.AppendCookie(cookie);
}
5、secure该属性只会是https页面会发生给浏览器,不然不可见:
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = new HttpCookie("name");
    cookie.Value = "value";
    cookie.Secure = true;
    this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,dom){
    document.Cookie = name + '=' + escape(value) +';secure';
}
6、读取Cookie
protected void page_load(object sender,EventArgs e)
{
    HttpCookie cookie = this.Request.Cookie["name"];
    if(cookie!=null)
    {
        string value = cookie.Value;
    }
}
在js中:
function GetCookie(name){
    var allcookies = document.Cookie;
    var start= allcookies.indexof(name+'=');
    if(start == -1)
    {
       return null;
    }
    start += name.length+1;
    var end = allcookies.indexof(';',start);
    if(end == -1)
    {
        end = allcookies.length;
    }
    var cookieval = allcookies.substring(start,end);
    return unescape(cookieval);
}

posted @ 2013-02-25 15:26  八神吻你  阅读(933)  评论(1编辑  收藏  举报