Nodejs 在每个请求上创建会话
Nodejs creating session on every request
我们正在创建一个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
相关文章:
- 如何在不使用 express 的情况下在 nodejs 中创建会话
- 为持久单页应用程序创建会话超时警告
- 创建在 ASP 会话中保留的弹出窗口
- 如何在javascript中以编程方式创建新的Google Analytics会话/访问者
- 为动态文本框创建新的会话变量
- 流星 - 创建一个复选框,用于隐藏会话中已完成的决议
- Nodejs 在每个请求上创建会话
- 从循环数据库值中创建会话变量
- Joomla-使用ajax从复选框创建会话变量
- 在ajax成功中创建会话变量
- Internet Explorer不允许我使用这个Javascript函数创建会话cookie
- 如何使用Node Js创建会话
- 为应用程序创建会话超时
- 无法在okta POST /sessions API调用中使用SessionToken创建会话
- 不使用cookie创建会话
- 如何在JavaScript MVC3中创建会话变量和检索
- 如何在jquery中为每个选项卡创建会话
- 使用Ajax创建会话和回显结果
- 如何在jQuery中创建会话
- 有可能在JavaScript中创建会话变量吗?