【问题标题】:How to store user data into node js express-session如何将用户数据存储到节点 js express-session
【发布时间】:2015-12-04 07:20:04
【问题描述】:

我在 nodeJS 上使用 expressexpress-session 和 mysql。我还可以设置 cookie 和会话。

这是我的代码:

app.use(cookieParser('3CCC4ACD-6ED1-4844-9217-82131BDCB239'));
session({resave: true, saveUninitialized: true, secret: '2C44774A-D649-4D44-9535-46E296EF984F', cookie: { maxAge: 600000 }}));

我可以在浏览器上看到一个名为 connect.id 的 cookie 已设置。 但是现在我不明白如何在从 mysql 数据库中获取用户 id 和用户名后存储它们。

已经用谷歌搜索了它,但无法找到解决方案。请帮助我。谢谢!!

【问题讨论】:

  • 以及如何在每次向他发送响应之前检查用户是否已登录。

标签: javascript node.js session npm server


【解决方案1】:

这是您设置会话的方式

const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
const store = new MongoDBStore({
  uri: MONGODB_URI,
  collection: 'sessions'
});
app.use(session({
  secret: 'secret string',
  resave: false,
  saveUninitialized: false
  store: store, /* store session data in mongodb */ 
  cookie: { /* can add cookie related info here */ }
}));

为了在会话中存储数据,您只需这样做,

req.session.user = user;
req.session.isLoggedIn = true;

访问方式相同。这些值将使用会话 cookie 作为查找值存储在服务器端。

【讨论】:

    【解决方案2】:

    您不会将这些存储在 cookie 中,在该用户第一次登录时,您将 cookieID 与数据库中的该用户名链接起来,现在每次用户连接时,您首先在数据库中查找 cookieID,如果它不存在,那么你发送他需要登录的用户。如果数据库中有一个寄存器,那么您就知道那是受信任的用户。

    您可以使用用户名作为键,因此如果相同的用户名带有不同的 cookieID,它将被覆盖,无论如何,您最好在数据库中保存一个时间戳,并删除那些具有确定旧的寄存器。

    这基本上是会话的作用,它在 cookie 中有一个 id 并保存与该 id 相关的变量,我对 express 会话的体验很糟糕,所以我更喜欢使用 cookie 并自己处理会话,这是我推荐的方式。

    在节点中,获取cookie:

    req.cookie.cookieName
    

    然后设置一个 cookie:

    res.cookie('cookieName', cookieValue);
    

    请不要将私人数据保存在 cookieValue 中,因为它可能是隐秘的。

    【讨论】:

    • 感谢您的信息。我还发现 express-session 有点复杂。你的方法很简单。它不会通过检查每个请求的数据库来减慢服务器的速度吗?请给我一些想法。
    猜你喜欢
    • 2012-12-07
    • 2020-07-13
    • 2019-01-11
    • 1970-01-01
    • 2015-05-04
    • 2016-06-10
    • 2012-03-20
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多