2017-02-12 7 views
0

私は非常に単純なnodejsチャットボットを持っており、接続されているクライアントに関することを学びます。たとえば、クライアントが「私の名前はボブ」と言って、チャットボットに「私の名前は何ですか?」と尋ねます。 chatbotは "Bob"と言うでしょう。別のクライアントがサーバーに接続してからchatbotに同じ質問をした場合、chatbotは "Bob"と返答します。私はセッションを扱う何らかの方法を実装する必要があることを理解していますが、セッションについてオンラインで見つけたものはすべて、クッキーに関することとユーザー認証の保存方法について説明していました。nodejsセッションを分離する方法

私がしたいのは、各クライアントに、他のクライアントについては何も知らない独自のサーバーインスタンスがあるようにすることです。

答えて

0

セッションはサーバー上の変数です。変数、配列、またはデータベースに格納することができます(サーバーが再起動する場合は、より良いオプション)。あなたのロジックに完全に依存します。

接続されているユーザーIDごとにデータがあるとしましょう。

var userData = {1: {username: "bob" }, 2: {username: "alice", ... }} 
1

Redisなどのメモリ内データベースを使用して、接続されたユーザーに関する情報をIDで識別して格納できます。 あなたのボットにメッセンジャープラットフォームを使用しているとしましょう。 Facebookからwebhookに送信される各メッセージには、メッセージを送信したユーザーのID、メッセージが送信されたページのIDなどの情報が付いています。次に、Redisを使用して、任意のユーザー(userID、userNameなど)メッセージを受け取ったら、そのIDをキーとしてユーザーに関する情報を照会するだけです。

0

クッキー、セッション、およびセッションストアを使用する必要があります。

適切なセッションライブラリを使用すると、クライアント上のユーザーとサーバー上のセッションに対してCookieが自動的に作成されます。 ブラウザでは、セッションIDのみがサーバー上のCookieに格納されます。セッションに必要な数のプロパティーを接続できます。それらを保持するために、Redisを使用することができます。

(第1、第2は、実際に異なっている注意)これら3つのライブラリを組み合わせて使用​​します。

  1. エクスプレス・セッション
  2. エクスプレス・セッション
  3. Redisの

は、その後、あなたの初期化このようにして...

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 
    }) 
})); 
最後のセッションを使用しては

私は、セッションを使用部分までスクロールする方法についてより多くの情報を持っているtutorialを書いたとして、単純に

//read 
let token = req.session.token 

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

ようである6

関連する問題