客户端缓存

411 阅读3分钟

客户端储存

目录

  • cookie
  • cookie的限制
  • cookie的构成
  • cookie的使用

cookie的限制

  • 一个浏览器最多300个cookie
  • 每个cookie不超过4096字节
  • 每个域不超过20个cookie
  • 每个域不超过81920字节 注意:每个域下设置cookie个数都是不太相同的,根据服务器不同限制也不太一样 比如ie,Edg每个域不超过50个cookie;Firefox每个域不超过150个cookie;Chrome就没有这个限制

cookie的构成

  • http中set-Cookie字段
  • 名称(name):name
  • 值(vaule):value
  • 域(domain):domain=.wrox.com;意思再www.wrox.com 下所以子域下都可以访问
  • 路径(path):path=/;
  • 过期时间:(expires):expires=Mon,22-Jan-07:10 GMT;
  • 安全标准(secure):secure意思这个只能在这个cookie在ssl连接下才会发送(发送的是名/值)

cookie的使用

1.js中的cookie


/* CookieUtil这个类是用javascipt来读写cookie的 */
class CookieUtil{
    static get(name){
        let cookieName=`${encodeURIComponent(name)}=`,
        cookieStart=document.cookie.indexOf(cookieName),
        cookieValue=null;
        if(cookieStart>-1){
            let cookieEnd=document.cookie.indexOf(";",cookieStart);
            if(cookieEnd==-1){
                cookieEnd=document.cookie.length;
            }
            cookieValue=decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length,cookieEnd));
        }
        return cookieValue;
    }
    static set(name,value,expires,path,domain,secure){
        let cookieText=`${encodeURIComponent(name)}=${encodeURIComponent(value)}`
        if(expires instanceof Date){
            cookieText+=`;expires=${expires.toGMTString()}`;
        }
        if(path){
            cookieText+=`;path=${path}`;

        }
        if(domain){
            cookieText+=`;domain=${domain}`;
        }

        if(secure){
            cookieText+=";secure";
        }
        document.cookie=cookieText;
    }
     static unset(name,path,domain,secure){
         CookieUtil.set(name,"",new Date(0),path,domain,secure);
     }
};
/* 设置cookie */
CookieUtil.set("name","ncc")
/* 读取cookie */
CookieUtil.get("name");

/* 删除cookie */
CookieUtil.unset("name")
/* 设置有路径,过期时间和域的cookie */
CookieUtil.set("name","ncc","/books/projs/","www.wrox.com",new Date("January 1,2010"));
/* 删除刚设置的cookie */
CookieUtil.unset("name","ncc","/books/projs/","www.wrox.com");

2.nodejs中的cookie

/* nodejs 使用cookie */

var express = require('express')
var cookieParser = require('cookie-parser')
var app = new express()
app.use(cookieParser());
 
app.get('/',function(req,res){
    console.log(req.cookies);
    res.send('你好nodejs')
})
 
app.get('/news',function(req,res){
    console.log(req.cookies);
    res.send('你好nodejs news')
})
 
app.get('/set',function(req,res){
    /*
    *   参数1:名字
    *   参数2:cookie的值
    *   参数3:cookie的配置信息
    * */
    //设置cookie由服务器端来完成,设置之后保存在浏览器本地
    // 客户端浏览器发送请求的时候把存储在浏览器本地的cookie也一并发送过去
 
 
    /*
    *   在localhost:3000下设置的cookie,默认在localhost:3000下的
    *   所有路由可以访问到
    * */
    res.cookie('username','cookie的值',{maxAge:600000})
 
    /*
    *   设置cookie path,只在设置cookie时所在的域名的path指定的路由下可以访问
    * */
    res.cookie('userinfo','cookie111',{maxAge:60000,path:'/news',httpOnly:true})
 
    /*
    *   aaa.com
    *   news.aaa.com
    *   www.aaa.com
    *   domain:'aaa.com'  多个二级域名共享cookie
    * */
    res.cookie('user','cookie的值111',{maxAge:600000,domain:'.aaa.com'});
 
    /*
    *   使用sign对cookie进行加密
    *   1、参数表示加密的随机字符串
    *   app.use(cookieParser('sign');
    *   2、设置
    *   res.cookie('userinfo','cookie222_info',{maxAge:50000,signed:true})
    *   3、使用 获取
    *   req.signedCookies
    * */
 
 
 
    res.send('设置cookie成功')
})
 
app.listen(3000,'localhost')
 

web storage storage类型 storage类型是用于保持名/值对的;storage的实例增加了以下方法: 1,clear():删除所以值 2,getItem(name)得到name值 3,key(index):获得给定数值位置的名称 4,removeItem(name):删除给定name的名值对 5,setItem(name,value); 这些方法直接或者间接通过storage对象调用 sessionStorag对象是storage对象的实例 sessionStorage对象 sessionStorage对象只存储会话数据,意味着当浏览器关闭数据就会消失

//使用方法储存数据
sessionStorage.setItem("name","luca")
// 使用属性储存数据
sessionStorage.book="luca"
//使用方法取得数据
let name=sessionStorage.getItem("name");
//使用delete删除值
delete sessionStorage.name
//使用方法删除值
sessionStorage.removeItem("name");

localStorage对象 浏览器持久储存数据

//使用方法储存数据
localStorage.setItem("name","luca")
// 使用属性储存数据
localStorage.book="luca"
//使用方法取得数据
let name=localStorage.getItem("name");
//使用delete删除值
delete localStorage.name
//使用方法删除值
localStorage.removeItem("name");