当从不同的浏览器或同一浏览器的不同选项卡(node.js,express)调用api时,会话变量将被覆盖

时间:2019-02-04 10:57:51

标签: node.js angular mongodb express express-session

我在节点应用程序中使用了会话,该会话在调用“ / login” api时将“公司名称”保存在称为“ sess.companyname”的会话变量中。然后,我在其他api调用中使用此会话变量从数据库中获取数据。

我面临的问题是当我打开其他浏览器并尝试为其他用户复制相同的过程时,会话变量被新的“公司名称”覆盖,而当我返回上一个现在,整个浏览器的数据就是新浏览器中这个新的“公司名称”。 例如:用户1从chrome登录,          用户2从firefox登录,          发生这种情况时,用户1的数据将替换为用户2的数据 //请注意,两个浏览器都在同一台计算机上运行。

这是我的Server.js文件:

 const express = require('express');
 const session = require('express-session');
 const mongoose = require('mongoose');
 const appRoute = require('./BackEnd/erpRoute');
 const bodyParser = require('body-parser');
 const port = 3000;
 const app = express();
 mongoose.connect('mongodb://dbkey...', (err) =>{
 if(err){
    console.log('error');
 }
 else{
    console.log('done');
 }
 });
 app.use((req, res, next) => {
 res.setHeader("Access-Control-Allow-Origin", "*");
 res.setHeader(
  "Access-Control-Allow-Headers",
  "Origin, X-Requested-With, Content-Type, Accept"
 );
 res.setHeader(
  "Access-Control-Allow-Methods",
  "GET, POST, PATCH, DELETE, OPTIONS"
 );
 next();
 });
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: false }));
 app.use(session({genid:(req) =>{console.log(req.sessionID) },secret: 'erp- 
 app', saveUninitialized: true, resave: false}));
 var sess;
 app.use('/erpRoute',appRoute);
 app.listen(port,() => {
 console.log("server live at : " + port );
 });

这是我的API路由文件:

var express = require('express');
var router = express.Router();
const CModel = require('./db');
const TModel = require('./db2');
const async = require('async');
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
  console.log('Time: ', Date.now());
  next();
});
//****************/the home page***********************
router.get('/', function (req, res) {
   res.send('Visit other routes to start the app!')
});
//**************/route for login validation*************
router.post('/login',(req, res) => {
sess=req.session;
sess.companyname;
    const email_id = req.body.email;
    const mypassword = req.body.password;
    CModel.findOne({$and:[
        {"email":email_id},
        {"password":mypassword}
    ]}).select({"company_name":1,"email":1,"password":1})
    .then((val,err) => {
        if(err){
            return res.status(500).send(err);
        }
        if(!val)
        {
           return res.status(403).json({
                status:"unSuccessful",
            });
        }   
        if(val){
            sess.companyname =  val.company_name;
            sess.save();
            console.log(sess);
            return res.status(200).json({
                status:"Successful",
                companyName:sess.companyname
            }); 
        }
    }).catch(err=>{res.status(500).send(err.message)});   
  });
  //************Route to display Existing Customers*************
  router.get('/CustomerDisplay',(req, res) => {
  const companyName = sess.companyname;
  CModel.find({"company_name":companyName},{"Sales_customer":1})
  .then((val,err) => {
     if(err){
         return res.status(500).send(err);
     }
     if(!val)
     {
          return res.status(403).json({
            status:"Customers Not Found",
          });
     }   
    if(val){
        return res.status(200).json({
            status:"Customers Found Successfully",
            companyName:val 
        }); 
    }
    }).catch(err=>{res.status(500).send(err.message)});   
    });

如果我在同一浏览器中尝试通过打开一个新的浏览器窗口或一个新的选项卡来尝试同样的问题。 这是因为服务器

0 个答案:

没有答案