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

  • 相关阅读:
    Swift开发--Storyboard的使用教程
    HDU 2188-悼念512汶川大地震遇难同胞――选拔志愿者(巴什博奕)
    编译iOS使用的.a库文件
    springMVC3学习(十)--注解式控制器
    oracle RANK() dense_rank()
    sum(),max(),avg(),RATIO_TO_REPORT()--分组统计
    cume_dist(),允许并列名次、复制名次自动空缺,取并列后较大名次,结果如22355778……
    cume_dist(),名次分析——-最大排名/总个数
    rank(),允许并列名次、复制名次自动空缺,结果如12245558……
    ROW_NUMBER(),不允许并列名次、相同值名次不重复,结果如123456……
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2932158.html
Copyright © 2020-2023  润新知