HTTP---Cookie

Cookie

Secure只会在https的时候发送

HttpOnly无法通过document.cookie访问

Cookie解决HTTP协议的无状态问题

Cookie是服务器发给客户端浏览器并保存在本地的一小块数据,并且在下一次访问时携带该数据发给服务器

浏览器第一次访问服务器并请求数据 --> 服务器响应浏览器,并且向浏览器发送请求的数据并且携带Cookie数据 --> 浏览器接收到后会把Cookie存储到客户端本地–> 当再次访问该服务器时,发送请求并且携带本地的Cookie --> 服务器接收Cookie并且响应请求的数据 --> 如此往返

1.服务器建立Cookie (浏览器第一次访问服务器)

2.服务器发送Cookie

3.浏览器接收Cookie,浏览器储存Cookie

4.浏览器发送Cookie(浏览器非第一次访问服务器)

5.服务器接收Cookie

现在浏览器现在出现了各种各样的储存方法 cookie逐渐淘汰

Cookie的作用域

Domain和Path标识定义了Cookie的作用域,即Cookie应该发送给那些URL

如果不指定,默认为当前文档的主机(不包含子域名)

如果指定Domain,一般包含子域名

Domain = XXXXX.com 则Cookie也包含子域名

Path标识指定了主机先的那个路径可以接受Cookie,用字符‘%x2F’("/")作为路径分隔符

Cookie的有效期

Max-Age和Expires标识定义了Cookie的有效期

会话期Cookie

​ 存储在浏览器中 关闭浏览器就消失 不需要Max-Age和Expires

持久性Cookie

​ 存储在客户端的电脑中 关闭浏览器也会存在 这个可以定义生存时间

​ 需要Max-Age和Expires

Cookie的应用

会话状态控制(购物车,用户登录状态等)

个性化设置(主题等)

浏览器行为跟踪

访问和更新Cookie

创建Cookie

js通过document.cookie属性来访问和更新cookie

document.cookie = newCookie;

Cookie存储的格式是键值对 一个Cookie可以存储多个键值对 键值对之间用";"隔开

创建

document.cookie = ‘键 =;//只能对一个cookie进行设置和更新  可能会有多个cookie
读取Cookie

document.cookie会把所有的cookie读出来

allCookies = document.cookie

通过每个cookie之间是用;隔开 所有通过字符串分割可以会的每一个

修改Cookie

因为cookie是键值对 所有通过 键找到对应的cookie 然后通过键修改值

//cookie = ‘键1 = 值1’

document.cookie = ‘键1 = 值2’;
删除Cookie

js中删除Cookie只需要设置Expires标识为以前的时间 这样这个cookie就过期了 就是删除了

HTTP中的Cookie

自动携带Cookie信息

Set-Cookie响应头

服务器使用Set-Cookie响应头向用户代理(一般为浏览器)发送Cookie信息

一个Set-Cookie响应头 对应 一个键值对

Set-Cookie:<cookie名> = <cookie值>
Set-Cookie:<cookie名> = <cookie值>

服务器通过该头部告知客户端保存Cookie的信息

Cookie请求头

一个可以Cookie请求头携带多个键值对

Cookie:<cookie名> = <cookie值>;<cookie名> = <cookie值>.....

Cookie

服务器

const http = require('http');
const fs = require('fs');

http.createServer(function(req,res){
    
    
    console.log('requset come',req.url);
    
    const host = req.headers.host

    if(req.url === '/'){
    
    
        const html = fs.readFileSync('test.html','utf-8');
        if(host === 'test.com'){
    
    
            res.writeHead(200,{
    
    
                'Content-Type':'text/html',
                'Set-Cookie':['id=123;max-age=2','abc=444;HttpOnly','aaa=bbb;domain=test.com'],//发送时 实际是'Set-Cookie':'id=123;max-age=2';      'Set-Cookie':'abc=444;HttpOnly';
                //写多个cookie时 nodejs中为用数组  每一个都是键值对   
                //实际上Set-Cookie并不能在一个Set-Cookie上写多个cookie 只不过是nodejs提供的一种便利的写法  
                //在真正发送时 还是一个Set-Cookie一个cookie键值对  写多个Set-Cookie
                //没有设置过期时间就是在关闭浏览器后失效  设置过期时间为max-age=  格式就是上面写的那样 
                //加上HttpOnly就会禁止js访问这个cookie
                //domain是设置让某个域下的所有子域都能访问这个cookie 
            });
        }
        res.end(html)
    }

}).listen(8888);
//   http://127.0.0.1:8888/

客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>xxxxaaaawwww</div>
</body>
<script>
   console.log(document.cookie)
</script>

</html>

猜你喜欢

转载自blog.csdn.net/weixin_44492275/article/details/108207951
今日推荐