【问题标题】:Express-session on two servers两台服务器上的快速会话
【发布时间】:2021-10-29 14:35:25
【问题描述】:

我一直在尝试在 两个 本地服务器上使用 express-session。

第一台服务器用于操作数据库,第二台用于加载页面。 我想在第一台服务器的会话中保存一些数据并在第二台服务器中使用。

这是第一个 API 的代码

require("dotenv").config();

const express = require('express');
const mysql = require("mysql");
const crypto = require("crypto");
const cors = require("cors");

const apiApp = express();

apiApp.use(express.json());
apiApp.use(cors());

const pool = mysql.createPool({
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  host: "localhost"
});

var algorithm = 'aes256'; // algorithm
var key = 'password';

apiApp.post('/api/Connexion', (req, res) => {

  let cipheriv = crypto.createCipher(algorithm, key);  
  let encryptedPassword = cipheriv.update(req.body.motDePasse, 'utf8', 'hex') + cipheriv.final('hex');

  var data = [req.body.courriel, encryptedPassword];

  const query = "SELECT * FROM utilisateurs WHERE courriel=? AND motDePasse=?";
  pool.query(query, data, (error, results) => {
    if (results[0] && !error) {
      res.send(true);
      req.session.courriel = req.body.courriel;
    } else {
      res.send(false);
    }
  });
});

module.exports = apiApp;

第二个

require("dotenv").config();

const express = require('express');
const cors = require("cors");
const path = require("path");

const coreApp = express();

coreApp.use(express.json());
coreApp.use(cors());

let dir = path.resolve(__dirname, '..', '..') + '/'
coreApp.use(express.static(dir));

coreApp.get('/connexion', (req, res) => {
    if (req.session != undefined) {
        console.log(req.session.courriel);
    }
    res.sendFile(dir + "index.html");
});

coreApp.get('/application', (req, res) => {
    res.sendFile(dir + "application.html");
});

coreApp.get('/:a', (req, res) => {
    res.redirect("/");
});

module.exports = coreApp;

所以,我尝试在第一个代码的 line 64 设置会话变量,并在第二个代码的 line 17 使用它。

我该怎么做? 谢谢!

【问题讨论】:

  • 两台服务器不共享会话数据。简单的答案是使用单个服务器。
  • 如果你使用共享数据库作为会话存储,通常是redis,你可以在服务器之间共享会话数据,但是只要两个服务器访问同一个数据库进行快速会话存储,任何数据库都可以工作。几十个数据库都有express-sessionstorage providers

标签: javascript node.js express session express-session


【解决方案1】:

如果您使用共享数据库作为快速会话(通常是 redis)的会话存储,则可以在服务器之间共享会话数据,但是只要两台服务器都访问同一个数据库用于快速会话存储和快速会话,任何数据库都可以工作。会话配置正确。

express-session storage providers 用于数十个数据库,包括与您已经在使用的数据库一起使用的 express-mysql-session

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 2013-03-09
    • 2021-07-10
    • 2012-09-17
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多