zoukankan      html  css  js  c++  java
  • 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);
    }

  • 相关阅读:
    个人博客开发之blogapi项目统一结果集api封装
    个人博客开发之blogapi 项目整合JWT实现token登录认证
    C语言I博客作业06
    C语言l博客作业03
    C语言I博客作业04
    C语言I博客作业05
    C语言I博客作业01
    C语言I博客作业07
    C语言I博客作业02
    UVA 11427 Expect the Expected [概率]
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2932158.html
Copyright © 2011-2022 走看看