0

我制作了两个监听端口 1234 和 5678 的 Web 应用程序。(我使用的是 Express js)

我在登录时存储了一些会话值。假设我在第一个应用程序(端口 1234)上登录时在会话中存储了一些字符串(如:“person1”),然后在第二个应用程序(在端口 5678)上登录时,我在会话中存储了一些字符串(如:“person2”)。当person2当时登录第二个应用程序时,它会破坏第一个应用程序的会话(!!?)然后如果我刷新页面,它会由于会话破坏而注销。

服务器端连接(第一个侦听端口 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 的第二个应用程序)

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>

客户端连接(第二个应用程序 [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 回答