zoukankan      html  css  js  c++  java
  • 跨域登录

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>实现跨域功能</title>
        <link rel="stylesheet" href="/assets/bootstrap/dist/css/bootstrap.min.css">
        <style type="text/css">
            .container {
                padding-top: 60px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <form id="loginForm">
                <div class="form-group">
                    <label>用户名</label>
                    <input type="text" name="username" class="form-control" placeholder="请输入用户名">
                </div>
                <div class="form-group">
                    <label>密码</label>
                    <input type="password" name="password" class="form-control" placeholder="请输入用密码">
                </div>
                <input type="button" class="btn btn-default" value="登录" id="loginBtn">
                <input type="button" class="btn btn-default" value="检测用户登录状态" id="checkLogin">
            </form>
        </div>
        <script type="text/javascript">
            // 获取登录按钮
            var loginBtn = document.getElementById('loginBtn');
            // 获取检测登录状态按钮
            var checkLogin = document.getElementById('checkLogin');
            // 获取登录表单
            var loginForm = document.getElementById('loginForm');
            // 为登录按钮添加点击事件
            loginBtn.onclick = function () {
                // 将html表单转换为formData表单对象
                var formData = new FormData(loginForm);
                // 创建ajax对象
                var xhr = new XMLHttpRequest();
                // 对ajax对象进行配置
                xhr.open('post', 'http://localhost:3001/login');
                // 当发送跨域请求时,携带cookie信息
                xhr.withCredentials = true;
                // 发送请求并传递请求参数
                xhr.send(formData);
                // 监听服务器端给予的响应内容
                xhr.onload = function () {
                    console.log(xhr.responseText);
                }
            }

            // 当检测用户状态按钮被点击时
            checkLogin.onclick = function () {
                // 创建ajax对象
                var xhr = new XMLHttpRequest();
                // 对ajax对象进行配置
                xhr.open('get', 'http://localhost:3001/checkLogin');
                // 当发送跨域请求时,携带cookie信息
                xhr.withCredentials = true;
                // 发送请求并传递请求参数
                xhr.send();
                // 监听服务器端给予的响应内容
                xhr.onload = function () {
                    console.log(xhr.responseText);
                }
            }
        </script>
    </body>
    </html>
     
    // 引入express框架
    const express = require('express');
    // 路径处理模块
    const path = require('path');
    // 接收post请求参数
    const formidable = require('formidable');
    // 实现session功能
    var session = require('express-session');
    // 创建web服务器
    const app = express();
    // 接收post请求参数
    // 实现session功能
    app.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: false
    }));

    // 静态资源访问服务功能
    app.use(express.static(path.join(__dirname, 'public')));

    // 拦截所有请求
    // app.use((req, res, next) => {
    //  // 1.允许哪些客户端访问我
    //  // * 代表允许所有的客户端访问我
    //  res.header('Access-Control-Allow-Origin', '*')
    //  // 2.允许客户端使用哪些请求方法访问我
    //  res.header('Access-Control-Allow-Methods', 'get,post')
    //  next();
    // });

    app.get('/test', (req, res) => {
        const result = 'fn({name: "张三"})';
        res.send(result);
    });

    app.get('/better', (req, res) => {
        // 接收客户端传递过来的函数的名称
        //const fnName = req.query.callback;
        // 将函数名称对应的函数调用代码返回给客户端
        //const data = JSON.stringify({name: "张三"});
        //const result = fnName + '('+ data +')';
        // setTimeout(() => {
        //  res.send(result);
        // }, 1000)
        res.jsonp({name: 'lisi', age: 20});
    });

    app.get('/cross', (req, res) => {
        res.send('ok')
    });

    // 拦截所有请求
    app.use((req, res, next) => {
        // 1.允许哪些客户端访问我
        // * 代表允许所有的客户端访问我
        // 注意:如果跨域请求中涉及到cookie信息传递,值不可以为*号 比如是具体的域名信息
        res.header('Access-Control-Allow-Origin', 'http://localhost:3000')
        // 2.允许客户端使用哪些请求方法访问我
        res.header('Access-Control-Allow-Methods', 'get,post')
        // 允许客户端发送跨域请求时携带cookie信息
        res.header('Access-Control-Allow-Credentials', true);
        next();
    });

    app.post('/login', (req, res) => {
        // 创建表单解析对象
        var form = formidable.IncomingForm();
        // 解析表单
        form.parse(req, (err, fields, file) => {
            // 接收客户端传递过来的用户名和密码
            const { username, password } = fields;
            // 用户名密码比对
            if (username == 'itheima' && password == '123456') {
                // 设置session
                req.session.isLogin = true;
                res.send({message: '登录成功'});
            } else {
                res.send({message: '登录失败, 用户名或密码错误'});
            }
        })
    });

    app.get('/checkLogin', (req, res) => {
        // 判断用户是否处于登录状态
        if (req.session.isLogin) {
            res.send({message: '处于登录状态'})
        } else {
            res.send({message: '处于未登录状态'})
        }
    });




    // 监听端口
    app.listen(3001);
    // 控制台提示输出
    console.log('服务器启动成功');
     
     
  • 相关阅读:
    文件操作方法大全以及文件打开的其他一些模式sys.stdout.write()就是标准输出到你当前的屏幕 sys.stdout.flush()把内存立即显示到您当前的屏幕
    文件操作之循环
    python中的enumerate函数用于遍历序列中的元素以及它们的下标
    文件操作open,r,w,a三种模式
    盖得化工--采集所有公司详细信息
    盖得化工--采集二级网址的公司详细信息
    [python网络编程]使用scapy修改源IP发送请求
    盖得化工----requests/bs4---采集二级网址
    盖得化工--selenium翻页测试
    盖得化工网——翻页测试---页码框输入页码
  • 原文地址:https://www.cnblogs.com/ericblog1992/p/13136003.html
Copyright © 2011-2022 走看看