欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

01.cookie

程序员文章站 2022-03-07 11:57:24
1. 为什么要用cookie或session因为http协议是无状态协议(没有记忆功能),当我们使用了cookie或session这些技术后,就可以让我们的系统有记忆的功能2. cookie的认识本质就是一个字符串,里面包含浏览器和服务器的沟通信息(交互产生的信息)。存储的形式:key-value的形式存储浏览器会自动携带该网站下的全部cookie到服务器端。3. cookie的分类:会话cookie:后台设置cookie时,没有设置maxAge的cookie默认是会话co...

1. 为什么要用cookie或session

因为http协议是无状态协议(没有记忆功能),当我们使用了cookie或session这些技术后,就可以让我们的系统有记忆的功能

2. cookie的认识

  • 本质就是一个字符串,里面包含浏览器和服务器的沟通信息(交互产生的信息)。
  • 存储的形式:key-value的形式存储
  • 浏览器会自动携带该网站下的全部cookie到服务器端。

3. cookie的分类:

  • 会话cookie:
    • 后台设置cookie时,没有设置maxAge的cookie默认是会话cookie
    • 会话cookie存储在浏览器运行的那块内存上
    • 关闭浏览器后,会话cookie会自动消失
  • 持久化cookie:
    • 后台设置cookie时,设置了maxAge的cookie
    • 存在用户的硬盘上
    • 看过期时间,一旦过了过期时间,自动销毁。
    • 如果没有到过期时间,但用户清理了,cookie也会消失

4. cookie的工作原理:

  • 当浏览器第一次请求服务器的时候,服务器可能返回一个或多个cookie给浏览器
  • 浏览器判断cookie的种类:
    • 会话cookie:存储在浏览器运行的那块内存上
    • 持久化cookie:存储在用户的硬盘上
  • 以后请求该服务器的时候,自动携带上该网站的所有cookie(无法进行干预)
  • 服务器拿到之前自己种下的cookie,分析里面的内容,校验cookie的合法性,根据cookie里保存的内容,进行具体的业务逻辑

5. 注意:

不同的语言,不同的后端架构cookie的具体语法不一样。但是cookie原理和工作过程是不变的

6. 设置cookie

  • 通过响应对象设置cookie:res.cookie(key, value, option)即可,设置多个cookie,则调用多次res.cookie()。
  • 必须在res.send()前调用res.cookie()。
  • option配置属性:
    • maxAge: cookie的有效时间,单位是毫秒
    • httpOnly: true则只能服务器访问cookie,客户端不能访问(客户端访问cookie用document.cookie,是一个字符串,格式位“key1=val1; key2=val2; …" )
    • path: cookie只能在某个路径中使用
    • domain:设置cookie只能在某个域名中使用

7. 获取cookie:

  • 需要用到第三方的cookie-parser中间件

  • 安装cookie-parser:npm install cookie-parser

  • 使用:let cookieParser = require(“cookie-parser”);

    ​ app.use(cookieParser());

  • 通过请求对象获取cookie:req.cookies.xxx;

8.代码示例:

const express = require("express");
const app = express();
//获取cookie的中间件,将客户端的cookie解析到req.cookies属性上
const cookieParser = require("cookie-parser");
//设置cookie
app.get("/setcookie", (req, res)=>{
  res.cookie.name = 'zhangsan';
  res.cookie.age = 12;
  res.send("设置cookie")
})//获取cookie
app.get("/getcookie", (req, res)=>{
  console.log(req.cookies.name);
  console.log(req.cookies.age);
  res.send("获取cookie")})

本文地址:https://blog.csdn.net/qq_42883274/article/details/107211078