如何为每个用户创建唯一的会话? - Node.js

时间:2015-12-07 21:50:52

标签: node.js session unique sessionid

我目前正在研究一个节点项目,我的问题是,如果我在一台计算机上登录网站而我为另一台计算机执行相同操作,我仍将登录该帐户。我认为这与使会话唯一的问题有关。这是我用于会话的中间件:

app.use(session({
    secret:"HelloWorld"
}));

如果有人想在这里看到节点文件,那就是:http://pastebin.com/euatwkNS

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用genid方法。

app.use(session({
    genid: function(req) { return uuid(); },
    secret:"HelloWorld"
}));

您已导入uuid。它应该工作。

  

注意请注意生成唯一ID,以免会话冲突。

更多信息:express-session

答案 1 :(得分:0)

您似乎还没有指定 express-session 应该在哪里存储会话数据。从 express-session docs 中:“警告默认的服务器端会话存储 MemoryStore 故意不是为生产环境设计的。它在大多数情况下会泄漏内存,不会扩展到单个进程,用于调试和开发。”

我不知道为什么他们没有在他们的文档中给出正确指定它的例子,但正确的方法应该是我得到的:

import express from 'express';
import session from 'express-session';
import connectMongo from 'connect-mongo';
import mongoose from 'mongoose';

const app = express();
... // configure mongoose db and connect

const MongoStore = connectMongo(session);

const month = 1000 * 60 * 60 * 24 * 30; // ms * s * min * h * days
var sess = {
    secret: 'session-secret',
    resave: false, // don't save session if unmodified
    saveUninitialized: false, // don't create session until something stored
    cookie: { maxAge: month }, // do not allows js on client to touch cookies
    store: new MongoStore({ mongooseConnection: mongoose.connection })
};
app.use(session(sess));

注意行 store: new MongoStore(...),这是指定 store 的方式。我为商店使用了 connect-mongo 包,这取决于猫鼬,但我看到您正在使用和尚,我没有将其列为现有商店,因此您可能必须创建自己的商店或转而使用猫鼬。 express-session docs 末尾提供了现有商店的完整列表。