Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点JS会话设置_Node.js_Session - Fatal编程技术网

Node.js 节点JS会话设置

Node.js 节点JS会话设置,node.js,session,Node.js,Session,我确实来自php背景,如果我设置了一个会话,它将特定于用户。因此,在开发过程中,我可以充当两个用户,以正常模式和匿名模式打开应用程序,并验证服务器和数据库更新之间的通信 现在我正在用Nodejs开发一个应用程序。要么我误解了使用PHP会话的express会话,要么我没有正确配置它。如果我在普通窗口中以用户身份登录并打开“匿名”窗口,会话将被重置 app.js 登录验证 因为我几乎已经完成了我的代码,我正在寻找一个类似的答案 如果由我主持,则每次用户尝试使用该应用程序时,会话都会被续订 如果否,则

我确实来自php背景,如果我设置了一个会话,它将特定于用户。因此,在开发过程中,我可以充当两个用户,以正常模式和匿名模式打开应用程序,并验证服务器和数据库更新之间的通信

现在我正在用Nodejs开发一个应用程序。要么我误解了使用PHP会话的express会话,要么我没有正确配置它。如果我在普通窗口中以用户身份登录并打开“匿名”窗口,会话将被重置

app.js

登录验证

因为我几乎已经完成了我的代码,我正在寻找一个类似的答案

如果由我主持,则每次用户尝试使用该应用程序时,会话都会被续订

如果否,则问题在于隐姓埋名模式。如果是,如何克服它


希望我能把问题说清楚。

我不完全清楚你在做什么来测试你的应用程序,但要回答你的主要问题,没有会话仍然是每个用户的,并且不会在任何用户登录时重置

也就是说,您描述的行为听起来很不对劲,所以您的代码中可能有一个bug。我看不到您在发布的代码中实际安装了路由的位置,因此很难看到,但我看到了两个常见的问题,即新加入的用户:

1.使用订单事项。因此,如果您在装载会话之前装载路由,您将看到奇怪之处


2建议在会话配置上设置secure属性用于生产,但会使会话看起来在开发中不起作用,因为开发人员站点通常不通过https提供服务

情况很简单。假设一个用户发布一个问题,另一个用户回答。因此,作为user-1,我打开了chrome并发布了一个问题。对于user-2,我按下Ctrl+N隐姓埋名模式并尝试以user-2身份登录。但是我的user-1会话丢失。我已更新了完整的app.js文件。如果我需要做任何改变,请告诉我。从你发布的内容我看不出来。您是否尝试过从两种不同的浏览器(如chrome和Firefox)登录以消除匿名模式下的任何异常情况?实际上,您是否也可以发布您的登录路径代码?您是在使用Passport还是发明了自己的逻辑来处理用户状态?我没有使用Passport。我已经更新了登录路径代码。在这里,我比较手机号码和otp,如果匹配,则将用户存储在req.session.user中
    var express = require('express');

var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

var http = require('http');
var reload = require('reload');

var index = require('./routes/index');
var users = require('./routes/users');
var user = require('./routes/user');
var dashboard = require('./routes/dashboard');
var search = require('./routes/search');
var profile = require('./routes/profile');
var ajax = require('./routes/admin-ajax');
var logout = require('./routes/logout');



var app = express();


app.set('port', process.env.PORT || 3000);

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true
}))

app.use('/', index);
app.use('/users', users);
app.use('/user', user);
app.use('/dashboard', dashboard);
app.use('/search', search);
app.use('/profile', profile);
app.use('/admin-ajax', ajax);
app.use('/logout', logout);




app.use('/js', express.static(__dirname + '/node_modules/bootstrap/dist/js')); // redirect bootstrap JS
app.use('/js', express.static(__dirname + '/node_modules/jquery/dist')); // redirect JS jQuery
app.use('/js', express.static(__dirname + '/node_modules/jquery-ui-dist')); // redirect JS jQuery
app.use('/js', express.static(__dirname + '/node_modules/popper.js/dist/umd')); 
app.use('/js', express.static(__dirname + '/node_modules/moment/min')); 
app.use('/js', express.static(__dirname + '/node_modules/lodash')); 
app.use('/css', express.static(__dirname + '/node_modules/jquery-ui-dist')); // redirect JS jQuery
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap
app.use('/css', express.static(__dirname + '/node_modules/font-awesome/css')); 
app.use('/css', express.static(__dirname + '/node_modules/animate.css')); 

app.use('/js', express.static(__dirname + '/node_modules/datatables.net/js')); 
app.use('/js', express.static(__dirname + '/node_modules/datatables.net-bs4/js')); 
app.use('/css', express.static(__dirname + '/node_modules/datatables.net-bs4/css')); 






// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});


// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


var server = http.createServer(app)

reload(app);
server.listen(app.get('port'), function () {
 console.log('Web server listening on port ' + app.get('port'))
});





module.exports = app;
user.verify_login = (req, res, next)=>{
    let query = {$and:[{mobile:{$eq:req.body.mobile}}, {otp:{$eq:_.toString(req.body.otp)}}]}
    db.connect(function(err, dbconnect){
        if(err)
            return res.status(404).send({message:'Error connecting db'});
        dbconnect.collection('users').findOne(query, function(err, result){
            if(err || _.isEmpty(result))
                return res.send({success:false, message:'Mobile OTP doesnot match'});
            result.success = true;
            req.session.user = result; // I am storing session value here
            return res.send({success:true, redirect:'/dashboard'});
        })
    });
}