为什么使用session:
session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登陆信息保存。
当客户访问其他界面时,可以判断客户的登陆状态,做出提示。
可以保存一些客户的常用信息,当客户端再次获取常用信息时,不必再从数据库中进行查询。
session可以与redis或数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)消失。
session的工作流程:
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对,
然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应session(value)。
客户的信息都保存在session中。
// 1.导入express模块
const express = require('express')
// 创建express的服务器实例
const app = express()
// 配置session中间件
const session = require('express-session')
app.use(
session({
secret:'Sillage', //可以为任意字符串
resave:false, //固定写法
saveUninitialized:true, //固定写法
})
)
app.use(express.static('./pages'))
// 解析post提交过来的表单数据
app.use(express.urlencoded({extended:false}))
// 登录的API接口
app.post('api/login',(req,res)=>{
// 判断用户提交的登录信息是否正确
if(req.body.username !== 'admin' || req.body.password !== '000000') {
return res.send({status:1,msg:'登录失败'})
}
//注意:只有成功配置了express-session这个中间件之后,才能通过req点出来session这个属性
req.session.user = req.body //将用户的信息,存储到session中
req.session.islogin = true //将用户的登录状态存储到session中
res.send({status:0,msg:'登录成功'})
})
// 获取用户姓名的接口
app.get('/api/username',(req,res)=>{
// 判断用户是否登录
if(!req.session.islogin) {
return res.send({status:1,msg:'fail'})
}
res.send({
status:0,
msg:'success',
username:req.session.user.username
})
})
// 清空session
// 退出登录的接口
app.post('/api/login',(req,res)=>{
// 清空当前客户端对应的session信息
req.session.destroy()
res.send({
status:0,
msg:'退出登录成功'
})
})
app.listen(80,()=>{
console.log('server running at http://127.0.0.1');
})