cookie
HTTP协议是一个无状态的协议,服务器无法区分请求是否发送自同一个客户端。cookie是HTTP协议中用来解决无状态问题的技术。cookie的本质是一个头,服务器以响应头的形式将cookie发送给客户端,客户端收到以后会将其存储,并在下一次向服务器发送请求时将其传回,这样服务器就可以根据cookie来识别出客户端了。
cookie是服务器创建的 发给客户端
使用步骤:
1.安装 cookie-parser
2.引入 const cookieParser = require("cookie-parser")
3.设置为中间件 app.use(cookieParser())
app.post("/login", (req,res) => {
const {username, password} = req.body
if(username === "admin" && password === "123"){
// res.send("登录成功")
//将用户名放入cookie
res.cookie("username",username)
res.redirect("/students/list")
}else{
res.send("错误")
}
})
cookie是有有效期的,默认情况下 cookie 的有效期就是一次会话(session)。会话指一次从打开到关闭浏览器的过程。
cookie属性
app.get("/set", (req,res) => {
res.cookie("name","jj",{
//配置对象
// expires:new Date(2023,11,7)
//maxAge 用来设置cookie有效时间,单位是毫秒
maxAge:1000 * 60 * 60 * 24 * 30
})
res.send("设置cookies")
})
删除cookie
app.get("/delete-cookie", (req,res) => {
//cookie一旦发送给浏览器就不能再修改了
//但是可以通过发送新的同名cookie来替换旧cookie,从而达到修改的目的
res.cookie("name","",{
maxAge:0
})
res.send("删除cookie")
})
读取cookie
app.get("/get", (req,res) => {
const name = req.cookies.name
console.log(name);
res.send("读取cookies")
})
session
cookie存在一些不足:cookie是由浏览器创建,浏览器保存。每次浏览器访问服务器时都需要将cookie发回,这就导致不能在cookie存放较多的数据。并且cookie是直接存储在客户端,容易被篡改盗用。使用cookie时一定不会在cookie存储敏感数据。为了解决cookie不足,希望可以将用户的数据统一存储在服务器中。每一个用户的数据都有一个对应的id,我们只需通过cookie将id发送给浏览器,浏览器只需每次访问将id发回,即可读取到服务器中存储的数据,这个技术称之为session(会话)。
session是服务器中的一个对象,这个对象用来存储用户的数据。每一个session对象都有一个唯一的id,id会通过cookie的形式发送给客户端。客户端每次访问时只需将存储有id的cookie发回即可获取它在服务器中存储的数据。在express可以通过 express-session 组件来实现
使用步骤:
1.安装 yarn add express-session
2.引入 const session = require()
3.设置为中间件 app.use(session({...}))
app.get("/set", (req,res) => {
req.session.username = "xx"
res.send("查看session")
})
app.get("/get", (req,res) => {
const username = req.session.username
console.log(username);
res.send("读取session")
})
//使用session为页面操作设置权限
app.post("/login", (req,res) => {
const {username, password} = req.body
if(username === "admin" && password === "123"){
req.session.loginUser = username
res.redirect("/students/list")
}else{
res.send("错误")
}
})
session本地存储
session失效的情况:第一种,浏览器cookie没有了;第二种,服务器中的session对象没有了。
express-session默认是将session存储在内存中,所以服务器一旦重启session会自动重置。所以使用session时通常会对session进行一个持久化的操作(写到文件或数据库)。
将session存储到本地文件:
引入中间件 session-file-store
使用步骤
1.安装 yarn add session-file-store
2.引入 const FileStore = require("session-file-store")(session)
app.use(session({
store:new FileStore({
//path用来指定session本地文件路径
path:path.resolve(__dirname,"./sessions"),
//secret:"hello",
//指定session有效时间
// ttl:10,
//默认情况下,fileStore会每间隔一个小时,清除一次本地session对象
// reapInterval:10
}),
secret:"hello"
}))
//使session失效
app.get("/logout", (req,res) => {
req.session.destroy(() => {
res.redirect("/")
})
})