• node 第八天 使用前后端不分离的方式实现cookie登录验证


    1. 实现cookie登录, 第一次登录成功后, cookie由服务端设置并保存在客户端, 后续访问在cookie过期前 (过期时间由后端设置) 将不需要登录
    2. cookie出现的背景是
      HTTP是无连接的,无状态的, 半双工(http2.0以下), 所以需要一个媒介存在http中, 服务端可以操作, 客户端也可以操作
      就出现了cookie
    3. 纯后端实现cookie登录验证功能
    4. node 后端
    const fs = require('fs');
    const url = require('url');
    const http = require('http');
    const querystring = require('querystring');
    const path = require('path');
    
    const server = http.createServer((req, res) => {
      let cookie = req.headers.cookie;
      cookie = cookie.replace(/\s/g, '');
      const cookieInfo = querystring.parse(cookie, ';');
      console.log(cookie, cookieInfo);
      res.writeHead(200, { 'content-type': 'text/html' });
      if (req.method.toUpperCase() === 'GET') {
        if (cookieInfo.token === 'abc') {
          fs.readFile('./content.html', (err, data) => {
            if (err) {
              throw err;
            }
            res.end(data, 'utf-8');
          });
        } else {
          fs.readFile('./login.html', (err, data) => {
            if (err) {
              throw err;
            }
            res.end(data, 'utf-8');
          });
        }
      } else {
        req.on('data', chunk => {
          let data = querystring.parse(chunk.toString('utf-8'));
          if (data.user === 'zhang' && data.pw === '123') {
            let date = new Date();
            date.setDate(date.getDate() + 1);
            let expires = date.toUTCString();
            res.writeHead(200, {
              'content-type': 'text/html',
              'set-cookie': [`token=abc; Expires=${expires}; HttpOnly;`, 'koken2=123']
            });
            fs.readFile('./content.html', (err, data) => {
              if (err) {
                throw err;
              }
              res.end(data, 'utf-8');
            });
          } else {
            fs.readFile('./login.html', (err, data) => {
              if (err) {
                throw err;
              }
              res.end(data, 'utf-8');
            });
          }
        });
      }
    });
    server.listen(3006);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    1. 未登录则返回登录页面
    DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>登录页title>
      head>
      <body>
        <h1>请登录:h1>
        <form action="http://127.0.0.1:3006/login" method="post" enctype="application/x-www-form-urlencoded">
          <input name="user" type="text" />
          <input name="pw" type="password" />
          <input type="submit" value="登录" />
        form>
      body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 已登录或有cookie凭证则返回内容页
    DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>内容页title>
      head>
      <body>
        <h1>欢迎您~h1>
      body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 实现比较简单, 仅是基础流程演示
  • 相关阅读:
    从文本提取信息(基于nltk)
    【Golang】gin客户端动态加载Html格式文件
    小型点阵屏后台监控系统研发
    基于springboot小区团购管理系统
    Python读取复杂电子表格(CSV)数据小技巧一则
    新手小白学JAVA 泛型 Collection List Set
    【Designing ML Systems】第 8 章 :数据分布转移和监控
    Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖...
    java毕业生设计一中体育馆管理系统计算机源码+系统+mysql+调试部署+lw
    MQ系列5:RocketMQ消息的发送模式
  • 原文地址:https://blog.csdn.net/weixin_43546457/article/details/133906081