课程信息
课程名称: Node.js+Express+Koa2+开发Web Server博客
课程章节: 第6章 博客项目之登录
课程讲师: 双越
课堂笔记
1、Cookie介绍
1.Cookie简介
Cookie存储在浏览器中的一段字符串(最大5kb)。跨域不共享(每个域名存储不一样的Cookie)。格式如:k1=v1;k2=v2;k3=v3;因此可以存储格式化数据。
每次发送HTTP请求,会将请求域的Cookie一起发送给Server。Server可以修改Cookie并返回给浏览器。浏览器中也可以通过JavaScript修改Cookie(有限制)。
2.客户端查看cookie的方式
(1)Network
浏览器审查元素→Network
(2)document.cookie
同时还可用累加方法修改cookie。
(3)Application
浏览器审查元素→Application
2、cookie用于登录验证
router/user.js:
const { login } = require("../controller/user")
const { SuccessModel, ErrorModel } = require("../model/resModel")
const handleBlogRouter = (req, res) => {
const method = req.method
// 登录
if (method === "GET" && req.path === "/api/user/login") {
const { username, password } = req.query
const result = login(username, password)
return result.then(data => {
if (data.username) {
// 操作cookie
res.setHeader("Set-Cookie", `username=${data.username}; path=/`)
return new SuccessModel()
}
return new ErrorModel("登陆失败")
})
}
}
module.exports = handleBlogRouter
3、对cookie做限制
说明:设置httpOnly,以及设置过期时间。
4、Session介绍与使用
1.Session简介
cookie会暴露username,非常危险。
解决方法:cookie中存储userid(如随机数),server端对应username。
使用Session,即server端存储用户信息。
cookie和session登录的原理:
客户输入账号密码进行登录,服务器端进行验证,验证成功则生成sessionId,并且在session对象中存储当前用户信息。
服务器端将sessionId写入客户端cookie中,当客户端下次访问服务器端时cookie会被自动发送给服务器端,服务器端在cookie中拿到sessionId然后在服务器端的session对象中查找sessionId进行验证,验证成功说明用户是登陆状态,则可以为其响应只有在登陆状态才能响应的数据。
总结:
req.cookie是保存在本地浏览器中(可以在浏览器的Network中看到cookie值),而req.session是保存在服务器中的(而在本地浏览器中不存在)。浏览器根据cookie的userid值去读取session的值。