站酷高高手,单页设计软件,CQ网站建设,中国网络营销公司排名文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍
所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议#xff0c;它没有办法… 文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍
所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议它没有办法区分多次的请求是否来自于同一个客户端无法区分用户 而产品中又大量存在的这样的需求所以我们需要通过会话控制来解决该问题 常见的会话控制技术有三种
cookiesessiontoken
2. cookie 相关操作
2.1 cookie 设置
const express require(express)const router express()router.get(/set-cookie, (req, res) { res.cookie(name, qingtian)res.send(success)
})router.listen(3000,() {console.log(go);
})这种创建路由规则的方式在浏览器全部窗口关闭之后就不会再出现cookie 值
七天之内免登录效果 res.cookie(name,lisi,{maxAge:30*1000})// maxAge 单位为ms这种创建路由规则的方式在达到maxAge 时cookie 值才会消失。
2.2 删除 cookie
// 删除cookie
router.get(/del-cookie, (req, res) {res.clearCookie(name)res.send(删除成功)
})2.3 获取cookie
// 获取cookie
router.get(/get-cookie, (req, res) {console.log(req.cookies);res.send(获取成功)
})3. session 相关操作
设置session
const express require(express)
const session require(express-session)
const MongoStore require(connect-mongo)const router express()router.use(session({name: sid,secret: atguigu,// 参与加密的字符串 也叫做加盐 、签名saveUninitialized: false,// 是否为每次请求都设置一个cookie用来存储session的idresave: true, //是否在每次请求时重新保存sessionstore: MongoStore.create({mongoUrl: mongodb://127.0.0.1:27017/test //数据库的连接配置}),cookie: {httpOnly: true, // 开启后前端无法通过 JS 操作maxAge: 1000 * 300 // 这一条 是控制 sessionID 的过期时间的},
}))// 设置session
router.get(/set-session, (req, res) {req.session.username wangwures.send(设置session)
})router.listen(3000, () {console.log(go);
})获取session
// 获取session
router.get(/get-session, (req, res) {console.log(req.session.username);if (req.session.username) {res.send(你好${req.session.username})} else {res.send(登录 注册)}
})销毁session
// 销毁session
router.get(/del-session, (req, res) {req.session.destroy(() {res.send(销毁session)})
})4. cookie 和session 的区别
cookie和session的区别主要有如下几点
存在的位置
cookie: 浏览器端session: 服务端
安全性
cookie是以明文的方式存放在客户端的安全性相对较低session存放于服务器中所以安全性相对较好
网络传输量
cookie设置内容过多会增大报文体积会影响传输效率session数据存储在服务器只是通过cookie 传递id,所以不影响传输效率
存储限制
刘览器限制单个cookis保存的数据不能超过4K,且单个域名下的存储数量也有限制session数据存储在服务器中所以没有这些限制
5. 补充知识 – CSRF跨站请求伪造
现有A,B两个网站如果B网站发送了一个A网站内部的请求比如退出登陆操作那么就出现了CSRF跨站请求伪造此时对A网站造成了影响这是我们可以将退出登录的get 请求改为post 请求。
6. token
JWT(JSON Web Token)是目前最流行的跨域认证解决方案可用于基于token的身份验证 JWT使token的生成与校验更规范 我们可以使用jsonwebtoken 包来操作token
const jwt require(jsonwebtoken)// 生成token
let token jwt.sign({username:zhangsan
}, atguigu, {expiresIn:60,// 单位为s
})console.log(token);// 校验token
let t jwt.verify(token, atguigu, (err, data) {if (err) {console.log(校验失败);}console.log(data);
})