2012-06-05 79 views
0

我做這在端口1234和5678聽(我用快遞JS)兩個WebSocket的覆蓋會話值

兩個web應用程序,我存儲,同時登錄一些會話值。假設我在第一個應用程序(在端口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); 

服務器側連接

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

======(其監聽端口5678秒應用) ================================================== ===============

客戶端連接(第一個應用程序[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> 

請幫我...

在此先感謝。

回答

0

您的應用程序都使用Express的(因此Connect的)MemoryStore來存儲會話數據。每個應用程序創建自己的MemoryStore對象,因此都不知道其他會話數據。

要麼使用會話存儲的其他方法(例如redis),要麼定義您自己的存儲方法(請參閱Connect's documentation)以使用兩個應用程序之間共享的對象(假設它們都是同一個node.js過程的一部分)。