2012-06-05 5 views
0

나는두 웹 소켓 재정의 세션 값

(I 익스프레스 JS를 사용하고 있습니다) 포트 1234 및 5678에서 수신 대기 두 개의 웹 응용 프로그램을 내가 로그인하는 동안 몇 가지 세션 값을 저장합니다. 첫 번째 응용 프로그램 (포트 1234)에 로그인하는 동안 세션에 일부 문자열 (예 : "person1")을 저장한다고 가정하고 두 번째 응용 프로그램 (포트 5678)에 로그인하는 동안 세션에 일부 문자열 (예 : "person2")을 저장합니다. person2가 두 번째 응용 프로그램에 로그인 할 때 첫 번째 응용 프로그램 (!!?)의 세션을 파괴 한 다음 페이지를 새로 고치면 세션이 종료되어 로그 아웃됩니다.

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 포트에서 수신 첫 번째 애플리케이션) ========================================================================================================== ===============

클라이언트 측 연결 (첫 번째 응용 프로그램 [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 프로세스에 속한다고 가정).).