登陆拦截

登陆拦截 [用户登陆状态保持]

当用户访问服务器的其他页面时, 需要先验证用户之前是否登陆过, 如果登陆过,就放行, 如果没有登陆跳转到登录页进行登陆;

登陆过用户: 要啥给啥
没有登陆过: 只给登录页

  1. http协议是无状态的
  2. cookie 和 session

1- http协议是无状态的

  • http协议是无状态,无记忆的,在早期互联网中,基本都是静态页面,只要用户输入正确网址,服务器就会返回页面给用户浏览;
  • 后来随着互联网发展, 出现了一些会员制网址, 购物网、相亲网址、 博客…, 就需要区分用户;
  • http 无记忆无状态: 同一个用户的多次请求之间 毫无关系;
    为了解决 服务器 不识别用户问题, 浏览器 中拓展cookie容器,服务器 拓展 session容器;

cookie 和 session

  • cookie 浏览器中存储数据的容器;
    容量小, 操作麻烦, cookie中的数据在每次请求服务器时,会自动发送给服务器使用;
    sessiion: 服务器中存储数据的容器;

cookie 和session 配合 识别用户的?

  • 当用户第一次到服务器, 服务器 会给当前用户开启一个单独session空间, 用于记录当前用户信息, 还会给当前用户生成一个唯一标识, 把标识通过响应报文传递给浏览器cookie;
  • 在第二次用户访问服务器, 会携带cookie中存放标记到服务器, 此时服务器即可识别用户;

session: 记录用户信息, 给用户生成标识
cookie: 存放标识,发送标识到服务器

登陆拦截 [用户登陆状态保持]

  • 在用户登陆成功时, 给登陆成功用户在session添加要给登陆成功的标记;
  • 后续用户在访问其他页面时, 要判断当前用户 是否有登陆成功标记, 如果有 放行, 如果没有去登陆页;

退出:

删除用户在服务器中登陆成功的标记;

cookie-session 登陆状态保存

http协议是无状态的

多次请求之间没有关系cookie

siession

express-session使用

  1. 下载 npm i express-session
  2. 导入 const session = require("express-session")
  3. 使用session中间件
app.use(session({
     // 给cookie中存储的sessionid加密的, 可以随意指定一个字符串
 	secret: 'itcast',
    // 设置浏览器端cookie中的sessionId设置名字, 默认connect.sid
    name: 'sessionId',
    resave: false,
    // 在浏览器和服务器连接的第一时间,分配session  给浏览器指定一个cookie
    saveUninitialized: true
 }))

​ 可以通过req.session访问到session

​ 4. 登录成功,把登录成功的用户信息存储到 req.session.xxx中

 db.findUser(username, password, result => {
    if (result.length > 0) {
      // 登录成功
      // 登录成功了,把当前用户的信息,保存到req.session中
      req.session.user = req.body
      res.redirect('/')
    } else {
      res.redirect('/login')
    }
  })

​ 5. 提供一个中间件,这个中间件在路由的前面,判断 req.session.xxx是否有值,有值,放走,没值,去登录,细节: 如果是/login 直接放走

app.use((req, res, next) => {    
    if ( !req.session.user && req.url !== '/login' ) {
        res.redirect('/login');        
    } else {
        next();
    }
});

​ 6. 退出功能: 把req.session.xxx 清空即可

  // 把session中的用户信息清空
  req.session.user = null
  // 跳到登录页
  res.redirect('/login')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值