session的使用

223 阅读2分钟

为什么使用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');
})