Nodejs 在每个请求上创建会话

Nodejs creating session on every request

本文关键字:创建 会话 请求 Nodejs      更新时间:2023-09-26

我们正在创建一个nodejs应用程序,我需要在其中维护会话。我们使用 express 来维护节点变量。但问题是,每当我们访问新服务时,都会创建一个新会话。

应用程序.js文件如下所示

var RedisStore = require('connect-redis')(session);
	module.exports = function Sessions(url, secret) {
	  var store = new RedisStore({ url: url });
	  var session = session({
		secret: 'dfsdfdff',
		store: 'test',
		resave: true,
		saveUninitialized: true
	  });
	  return session;
	};

var express = require('express');
var session  = require('express-session');
var routes = require('./routes');
var http = require('http');
var https = require('https');
var path = require('path');
var Q = require('q');
var fs = require('fs');
var formidable = require("formidable");
var util = require('util');
var url = require('url');
var request = require('request');
var users = require('./routes/language');
var user_auth = require('./routes/auth');

身份验证.js文件如下所示

exports.generateToken = function(req, res, next) {
    res.render('index', {
    page_title: 'PEN_V4'});
    var sess = req.session;
    sess.user_id = 'Hello1';
    console.log('Hello 1============');
    console.log(sess.user_id);
    console.log('session*****************************============');
    console.log(sess);
    res.end();
}
exports.myToken = function(req, res, next) {
    console.log(req.session);
    console.log('session============');
    console.log('session*****************************============');
    res.end();
}

 app.configure(function() {
        app.use(express.bodyParser());
        app.use(express.methodOverride());
        app.use(express.static(__dirname + '/static'));
        app.use(express.cookieParser());
        app.use(express.session({
            secret: 'alessios',
            store: MemStore({
                reapInterval: 60000 * 10
            }),
			cookie :{httpOnly: true}
        }));
    });

然后从索引中.html我们调用 API 的 myToken 和 generateToken。但两个 API 都显示不同的会话。任何人都可以指导我们一些关于我们做错了什么的事情吗?

是否设置了中间件express-session?仅仅要求包是不够的,你需要使用它,像这样:

const session = require('express-session');    
const RedisStore = require('connect-redis')(session);
app.use(session({
  store: new RedisStore(config.redis),
  secret: 'w5qTAcEMgNeNzrPg',
  proxy: true,
  resave: true,
  saveUninitialized: true
}));

(在此示例中,我使用 Redis 会话存储)

由于您使用的是内置的bodyParser和cookieParser,它们仅包含在4.x之前的Express版本中,因此我得出结论,您使用的是过时的Express版本。您的问题可以通过升级 Express 来解决(有关从 3.x 升级到 4.x 的信息:https://strongloop.com/strongblog/express-3-to-4-migration-guide/)

设置多个 cookie 时,设置cookie标头

似乎存在问题,因此会话cookie不会在第一个请求(或应设置另一个cookie的所有其他请求)上设置。在您的完整设置中是这种情况吗?

有关该问题和可能的解决方案的更多信息,请阅读我对另一个问题的以下回答:使用护照的快速会话.js多个cookie