0

ポート 1234 と 5678 でリッスンする 2 つの Web アプリケーションを作成します (Express js を使用しています)。

そして、ログイン中にいくつかのセッション値を保存します。最初のアプリケーション (ポート 1234) にログインしているときにセッションに文字列 (:"person1" など) を保存し、2 番目のアプリケーション (ポート 5678) にログインしているときにセッションに文字列 (: "person2" など) を保存するとします。その時点で person2 が 2 番目のアプリケーションにログインすると、最初のアプリケーションのセッションが破棄されます (!!?)。その後、ページを更新すると、セッションの破棄によりログアウトされます。

サーバー側接続 (ポート 1234 でリッスンする最初のアプリケーション)

var express = require('express'),
    sio = require('socket.io');

app = express.createServer();

app.configure('development', function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: "hello1"}));
    app.use(express.static(__dirname + '/'));
    app.set('views', __dirname + '/views');
    app.use(express.errorHandler({dumpExceptions: true, showStack: true}));
    app.use(app.router);
});

app.listen(1234);
app.get('/login', function (req, res) {
    req.session.uName = req.body.uName;
    .
    .
    .
    .
    .
});
var io = sio.listen(app);

サーバー側接続 (ポート 5678 でリッスンする 2 番目のアプリケーション)

app.get('/login', function (req, res) {
    req.session.uName = req.body.uName;
    .
    .
    .
    .
    .
});
app.listen(5678);
var io = sio.listen(app);

================================================== =======================

クライアント側接続 (最初のアプリケーション [1234])

<script type="text/javascript" src="/socket.io/socket.io.js" ></script>
<script>
      var socket = io.connect("http://"+mylocalip+":1234");
</script>

クライアント側接続 (2 番目のアプリケーション [5678])

<script type="text/javascript" src="/socket.io/socket.io.js" ></script>
<script>
      var socket = io.connect("http://"+mylocalip+":5678");
</script>

私を助けてください ...

前もって感謝します。

4

1 に答える 1

0

どちらのアプリも、Express(したがってConnect)のMemoryStoreを使用してセッションデータを保存しています。各アプリは独自のMemoryStoreオブジェクトを作成するため、どちらも相手のセッションデータを認識しません。

他のセッションストレージの方法(redisなど)を使用するか、独自のストレージ方法を定義して(Connectのドキュメントを参照)、両方のアプリ間で共有されるオブジェクトを使用します(両方が同じnode.jsプロセスの一部であると想定)。

于 2012-06-06T05:24:20.767 に答える