38协议 cookie特点及封装

38协议 cookie特点及封装

一、协议

协议,就是事先的一种约定、规则、规范、标准。

常见协议

- HTTPHTTPS超文本传输协议
    
- FTP文件传输协议
    
- SMTP简单邮件传输协议

TCP协议

TCP/IP协议栈分为四层,每一层都有特定的协议与对方进行通信,而协议之间的通信最终都要转化为01的电信号,通过物理介质进行传输才能达到对方的电脑,因此物理介质是网络通信的基石

三次握手

- 建立连接时,客户端发送SYN(SYN=i) 到服务器,并进入到SYN-SEND状态,等待服务器确认
    
- 服务器收到SYN包,必须确认客户的SYN (ack=i+1) ,同时自己也发送一个SYN(SYN=k) ,SYN+ACK包,此时服务器进入SYN-RECV状态
    
- 客户端收到服务器的SYN+ACK包,向服务器确认报ACK (ack=k+1) ,次此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据

四次挥手

- client发送一个FIN,用来关闭client到server的数据传送,client进入FIN_WAIT_1状态
    
- server收到FIN后,发送送一个ACK给client,确认序号为收到序号+1 (STN相同,一个FIN占用一个序号) ,server进入CLOSE_WAIT状态
    
- server发送一个FIN,用来关闭server到client的数据传送,server进入LAST_ACK状态
    
- client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1,server进入CLOSED状态,完成四次挥手

HTTP协议

HTTP协议即超文本传输协议,是一个 浏览器端 和 服务器端 请求和响应标准

- 常用请求方法	GET,POST
    
- 请求	请求行、请求头、请求主体
    
- 响应	状态行、响应头、响应主体

HTTP的请求协议

HTTP请求由状态行、请求头、请求正文三部分组成
    
    状态行	包括请求方式method、资源路径URL、协议版本version
    
    请求头	包括一些访问的域名、用户代理、cookie等信息
    
    请求正文	就是HTTP请求的数据

HTTP协议特点

无状态的,多次请求之间没有相关性

二、cookie

cookie的特点

- cookie中的数据可以被同一个网站的页面所共享
    
- 不同浏览器的cookie不能共享
    
- cookie的数据存储在浏览器中,每次请求服务器,在请求报文中携带cookie的数据,发送个服务器
    
- 服务器端无法直接操作cookie,是通过在服务器端设置响应头的方式,通知浏览器对coolie进行设置
    
- cookie中的数据有效期,不设置是会话级别的,浏览器关闭,会话结束,数据销毁,可以人为设置cookie的有效期
    
- cookie存储容量小,约4kb

cookie的查看

document.cookie

三、cookie封装

使用对象将cookie封装

//定义对象cookie

let cookie = {
    
    //设置对象里面的设置cookie事件
    //key	cookie的名称
    //value	cookie的值
    //time	cookie的有效时间(单位:min)
    
    setCookie(key, value, time){
        
        //判断cookie的名称或cookie的值是否存在
        
        if(!key || !value){
            
            //如果cookie的名称和cookie的值不存在返回空
            
            return null
        }
        
        //定义exp为空,方便后面赋值
        
        let exp = ""
        
        //如果cookie的有效时间存在
        
        if(time){
            
            //获取时间date
            
            let date = new Date()
            
            //获取当前时间戳now
            
            let now = date.getTime()
            
            //有效时间的结束时间
            
            date.setTime(now + time * 60 * 1000)
            
            //将结束时间转换为GTM标准时间
            
            let gmt = date.toGMTString()
            
            //exp赋值
            
            exp = ";expires=" + gmt
        }
        
        //当time存在时
        //return document.cookie = key + "=" + value + ";expires=" + gmt
        //当time不存在时
        //return document.cookie = key + "=" + value + ""
        
        return document.cookie = key + "=" + value + exp
    },
    
    //设置对象里面的获取cookie事件
    //key	cookie的名称
    
    getCookie(key){
        
        //将cookie以";"分割成有若干个值的数组arr
        
        let arr = document.cookie.split(";")
        
        //使用map()函数遍历
        
        let value = arr.map(item => {
            
            //因为arr里面的值item前后有空格,所以使用trim()函数
            //当前后没有空格的arr里面的值item.trim()是以cookie的名称key开头时
            
            if(item.trim().indexOf(key) == 0){
                
                //将arr里的值item以"="分割成cookie包含名称key和cookie的值value的数组
                //取该数组的第1项就是key对应的cookie的值
                
                return (item.split("="))[1]
            }
        })
        
        //value本为一个只有一个key对应的cookie的值和多个undefined的数组
        //value.join("")就是将value转为字符串且直接连接,这种连接方式会将undefined直接忽略掉
        //打印的就是需要的key对应的cookie的值
        
        console.log(value.join(""))
    }
}

//实例化
//设置cookie

cookie.setCookie("name", "zhangsan")
cookie.setCookie("age", 18, 60)
cookie.setCookie("sex", "nan")

//获取cookie名称对应的值

cookie.getCookie("name")

//zhangsan
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值