zoukankan      html  css  js  c++  java
  • 20、express跨域配置,session处理,vue---asiox跨域处理cookie

    一、express跨域配置

    app.js

    //设置跨域请求
    app.all('*', function (req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
      res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
      res.header("X-Powered-By", ' 3.2.1')
      res.header("Content-Type", "application/json;charset=utf-8");
      next();
    });
    

    二、session处理

    var cookieSession = require("cookie-session");
    var keys = [];
    for(var i = 0; i < 10000; i++){
    	keys.push("sessionid"+Math.random());
    }
    
    app.use(cookieSession({
    	name:"sessionId",
    	keys,
    	maxAge:30*60*1000 //ms
    }))
    
    

    三、存储cookie

    后台此为注册验证码接口

    npm i -S svg-captcha

    const svgCaptcha = require('svg-captcha');
    router.get('/getCode',(req,res)=>{
      var codeConfig = {
        size: 5,// 验证码长度
        ignoreChars: '0o1i', // 验证码字符中排除 0o1i
        noise: 2, // 干扰线条的数量
        color: true,
        background: '#cc9966',
        height: 40,
         100
      }
      const captcha = svgCaptcha.createMathExpr(codeConfig);
      req.session.captcha = captcha.text.toLocaleLowerCase(); // session 存储
      res.type('svg'); // 响应的类型
      res.send(captcha.data);
    });
    

    使用时直接req.session.captcha

    前端 vue项目 axios请求

    withCredentials设置为true,可以在单个请求设置,也可全局设置。
    设置为true,本地才会存储,接口请求头才会带cookie

    全局:axios.defaults.withCredentials = true

    浏览器的cookie是HttpOnly,不能被js读取。

    注 withCredentials设置为true请求头设置cookie,响应头存储cookie,可以跨域。但后台,res.header("Access-Control-Allow-Origin", "");不能用'',需用用固定的地址
    后台express设置下

    1、动态设置Access-Control-Allow-Origin

    let originHeader=req.headers.origin;
    res.header("Access-Control-Allow-Origin", originHeader);

    2、Access-Control-Allow-Credentials设为true

    res.header("Access-Control-Allow-Credentials", true);

    代码如下

    //设置跨域请求
    app.all('*', function (req, res, next) {
      let originHeader=req.headers.origin;
      res.header("Access-Control-Allow-Origin", originHeader);
      // res.header("Access-Control-Allow-Origin", "*");
      res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
      res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
      res.header("X-Powered-By", ' 3.2.1')
      res.header("Content-Type", "application/json;charset=utf-8");
      res.header("Access-Control-Allow-Credentials", true);
      next();
    });
    

    这样就可以了

    session

  • 相关阅读:
    BZOJ 1070 修车
    BZOJ 1927 SDOI2010 星际竞速 最小费用最大流
    LOJ 2321 清华集训2017 无限之环 拆点+最小费用最大流
    EZOJ 宝石迷阵 建图+网络流匹配
    BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
    POJ 1637 Sightseeing tour 建图+网络流
    POJ 1149 PIGS 建图,最大流
    【2018 1月集训 Day1】二分的代价
    【2019 1月集训 Day1】回文的后缀
    20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/12697344.html
Copyright © 2011-2022 走看看