2012-01-11 1 views
4

node.js와 express, socket.io를 사용합니다. Express에서 세션을 사용합니다.Node.js - express - session

어떻게 세션을 읽고 socket.io에서 그와 함께 작업 할 수 있습니까?

store.userid는 정의되지 않았습니다. 변수 가게에서

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

store = new express.session.MemoryStore; 

app.configure(function() { 

    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: 'secret', store: store })) 

    app.use(stylus.middleware({ src: __dirname + '/public', compile: compile })) 
    app.use(express.static(__dirname + '/public')); 
    app.set('views', __dirname); 
    app.set('view engine', 'ejs'); 

    //disable layout 
    app.set("view options", {layout: false}); 
    }); 

app.get('/', function(req, res) { 

req.session.userid = Math.floor(Math.random()*5000); 

}); 


var io = sio.listen(app) 
    , nicknames = {}; 
io.configure(function() { 
    io.set('transports', ['websocket','flashsocket','xhr-polling']); 
}); 


io.sockets.on('connection', function (socket) { 

    socket.emit('hello', { hello: store.userid }); //store.userid is undefined 

    }); 

:

저장 =

{ sessions: { 'DNHIsZqgk53zbK3xg8qescJK.dUbdgfVq0D70UaLTMGTzO4yx5vVJral2zIhVsfFGnBA': '{"lastAccess":1326317111111,"cookie":{"originalMaxAge":14399999,"expires":"2012-01-12T01:28:17.266Z", 
"httpOnly":true,"path":"/"},"userid":3528}' }, 
    hash: [Function], 
    generate: [Function] } 

답변

2

내가 잘못 될 수있다,하지만 난 당신이 할 수 있다고 생각하지 않습니다 (또는한다)는 채워야하기 위해 HTTP 세션에 의존 연결 이벤트 처리기를 실행할 때 그것들은 다른 프로토콜에서 실행될 가능성이 높습니다. 그리고 http 세션은 브라우저 쿠키에 의존합니다 (어떤 socket.io 은 xhr 폴링을 할 때 보내지 만 실제로 '실제'소켓을 사용하는 경우에는 그렇지 않습니다).

클라이언트 JS가 수동으로 쿠키를 가져 오는 것이 좋습니다 (JS를 사용하여 쿠키를 가져 오거나 어떻게 든 원하는대로 페이지에 쓰고 싶을 때). 그런 다음 클라이언트가 연결을 만들면 해당 값을 전달할 수 있고이를 사용하여 세션과 연결할 수 있습니다. github 페이지의 모든 세션을 지속하는 작업에 관한 문서가 있습니다. 여기에서 "세션"을 검색하십시오 : https://github.com/learnboost/socket.io

+0

클라이언트 측 쿠키에서 사용할 수 있습니다 - 안전한 해결책입니까? 클라이언트 측에서 쿠키 세션 ID를 저장 하시겠습니까? – Jenan

+3

이 튜토리얼은 훌륭합니다 - http://www.danielbaulig.de/socket-ioexpress/ - 해결. – Jenan