对Cookie及http协议的理解

一、HTTP协议

       1、HTTP协议,即超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

       2、HTTP协议是一个无状态的通信协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。它基于TCP协议的一种高级协议,用于客户端和服务器直接的通信。

       3、服务器到底是怎么被访问的?
例:
        地址(url):https://www.baidu.com:443/xx/xx/xx?xx=xx&xx=xx

    http/https:传输协议
    www.baidu.com:域名,地址
    :80/:443:端口
    /xx/xx/xx:服务器路径
    ?xx=xx&xx=xx:以某种方式向服务器发送的数据
    某种方式:get/post

       4、http 默认端口号:80;https(secure)协议 默认端口号:443。

二、Cookie

1.Cookie概念

       指某些网站为了辨别用户身份,进行session(会话)跟踪而存储在用户本地终端上的数据(通常经过加密),以文本形式存在。
       例:
       谷歌浏览器存储地址: C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default\文件夹下的Cookies文件。

注:
cookie 只有在服务器环境下才有用;

禁用cookie:
改变浏览器的cookie设置。如果浏览器完全禁止cookie功能的话,大多数网站的基本功能无法正常使用。

2.Cookie特点

  • chrome和safari没有对cookie的个数做限制,一般浏览器限制同一域名数量为50个。
  • cookie文件的总大小一般为4KB(同一个域名)。
  • API需要封装才能使用。
  • 只能使用文本文件,用于客户端和服务端通信。
  • 读取有域名限制。 域名 www.baidu.com www.taobao.com , 不可跨域读取,只能由来自 写入cookie的 同一域名 的网页可进行读取。 简单的讲就是,谁写的cookie,谁才有权利读取 。
  • 时效性:每个cookie都有时效,最短的有效期是,会话级别:就是当浏览器关闭,那么cookie立即销毁。

3.Cookie使用

①添加

// 添加cookie:document.cookie = “key=value”; 一次写入一个键值对
document.cookie = 'value1 = hello';
document.cookie = 'value2 = world';
//打开控制台,点击application,就能看到在浏览器中cookie的样子

       注意:document.cookie一次只能写入一个Cookie,且写入并不是覆盖,而是添加。

②读取

document.cookie; // "value1 = hello; value2 = world"

       上面代码从document.cookie一次性读出两个 Cookie,它们之间使用 分号空格 分隔。必须手动还原,才能取出每一个 Cookie 的值。

var cookies = document.cookie.split('; ');

for (var i = 0; i < cookies.length; i++) { 
      console.log(cookies[i]);
}

③修改

// 修改名为key的cookie值
document.cookie = "key=value"; 
document.cookie = "test2=demo";
document.cookie; // "value1=hello; value2=demo"

④失效

       expires 。没有设置失效时间的cookie 在浏览器关闭以后就会自动删除,如果设置了失效时候在未来的时间,就可以让cookie保存的时间更长。
设置失效时间:document.cookie = “key=value;expires=”+ oDate;

var oDate = new Date();
oDate.setDate(oDate.getDate() + 3);
document.cookie = "key=value;expires="+ oDate;
//上面代码设置cookie的过期时间为 3 天以后

⑤删除

       将cookie值覆盖为空,并将失效时间设置为过去的时间:

var oDate = new Date();
oDate.setDate(oDate.getDate() -3);
document.cookie = "test=;expires="+ oDate;
//将cookie的过期时间设置为 3 天前,test 这个cookie 就获取不到了

⑥设置域名、路径

  • 设置域名:domain
    设置域名:document.cookie = “key=value;domain=www.baidu.com”;
    :必须在绑定域名的服务器才可以设置域名,上不同服务器之间的cookie文件不能共享。

  • 设置路径:path
    设置路径: document.cookie = “key=value;path=/”;

document.cookie = "key=value;path=/";
//设置cookie的路径为根路径,这样我们网站下的所有页面可以共享cookie

注:在同一路径下的网页可以共享cookie,路径不同时,不可以访问。如果有中文内容,需要用encodeURIComponent('xxxx')进行编码,再使用decodeURIComponent('xxxx')进行解码,解决中文乱码的问题。

4.Cookie封装

①增加/修改cookie函数

function setCookie(name,value,iDay){
    var newDate = new Date();
    newDate.setDate(newDate.getDate()+iDay);
    // 中文编码
    value = encodeURIComponent(value);

    document.cookie=name+"="+value+";expires="+newDate+";path=/";
}

②获取cookie函数

function getCookie(name){
     //解码,解决乱码问题
    cookie = decodeURIComponent(document.cookie);
    var arr = cookie.split("; ");
    for(var i =0; i<arr.length; i++){
        var arr2 = arr[i].split("=");
        if(arr2[0] == name){
            return arr2[1];
        }
    }
}

③删除cookie函数

function removeCookie(name){
      setCookie(name,1,-10);
}
发布了59 篇原创文章 · 获赞 216 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42881768/article/details/104771399