Cookie的小知识

本文详细介绍了Cookie的工作原理,包括如何在ASP.NET和JavaScript中创建、设置属性及读取Cookie。涵盖expires、path、domain等关键属性及其对Cookie可见性和生命周期的影响。
摘要由CSDN通过智能技术生成

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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值