首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分离nodejs会话

如何分离nodejs会话
EN

Stack Overflow用户
提问于 2017-02-12 20:31:26
回答 3查看 500关注 0票数 0

我有一个非常简单的nodejs聊天机器人,它可以学习有关连接到它的客户端的信息。例如,如果客户说“我的名字是Bob”,然后问聊天机器人“我叫什么名字?”聊天机器人会说"Bob“问题是,如果另一个客户端连接到服务器,然后问聊天机器人相同的问题,聊天机器人也会回答"Bob”。我知道我需要实现一些处理会话的方法,但是我在网上找到的关于会话的所有东西都是关于cookie和如何存储用户身份验证的解释。

我所要做的就是让每个客户端都拥有自己的服务器实例,该实例对其他客户端一无所知。

EN

回答 3

Stack Overflow用户

发布于 2017-07-04 05:33:34

您可以使用诸如Redis之类的内存数据库来存储有关已连接用户的信息,方法是根据用户的id来识别这些用户。让我们假设你正在为你的机器人使用信使平台。你从Facebook到你的webhook的每一条消息都伴随着一些信息,比如发送消息的用户的id,消息被发送到的页面的id,等等。然后你可以使用Redis来存储任何用户的任何信息(userID,userName等)。收到消息后,您只需使用用户的id作为关键字来查询有关该用户的信息。

票数 1
EN

Stack Overflow用户

发布于 2017-02-12 22:32:03

Session只是服务器上的变量。您可以存储在变量,数组或数据库(更好的选择,以防服务器重新启动)。所以这完全取决于你的逻辑。

假设对于每个连接的用户id,您将拥有其数据。

代码语言:javascript
复制
var userData = {1: {username: "bob" }, 2: {username: "alice", ... }}
票数 0
EN

Stack Overflow用户

发布于 2017-10-09 03:49:31

您需要使用cookie、会话和会话存储。

如果您使用正确的会话库,它将自动为客户端上的用户和服务器上的会话创建cookies。在浏览器上,只有sessionID存储在cookie中,在服务器上,您可以将任意多个属性附加到会话。要持久化它们,可以使用Redis。

使用这三个库的组合(请注意,第一个和第二个实际上是不同的):

  1. express-sessions
  2. express-session
  3. redis

然后你用这种方式初始化它...

代码语言:javascript
复制
var redis = require('redis');
var client = redis.createClient();
var crypto = require('crypto');
var session = require('express-session');

app.use(session({
    secret: 'A-SECRET-NOBODY-KNOWS',
    resave: false,
    saveUninitialized: true,
    genid: (req) => {
            return crypto.randomBytes(16).toString('hex');;
          },
    store: new (require('express-sessions'))({
        storage: 'redis',
        instance: client, // optional 
        collection: 'sessions' // optional 
    })
}));

最后,使用会话非常简单

代码语言:javascript
复制
//read
let token = req.session.token

//write
req.session.token= 'A very secret token';

我编写了一个tutorial,其中包含有关如何使用会话的更多信息,请向下滚动到第6部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42187540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档