2012-01-11 17 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がクッキー(または少なくともセッションID)を手動で何とか(JSを使用してクッキーを取得するか、何らかの形でページに書きたい場合)フェッチすることをお勧めします。次に、クライアントが接続を確立すると、その値を渡すことができ、それをセッションに関連付けるために使用することができます。 githubページ上のすべてのセッションを持続させるためのいくつかのドキュメントがあります。 https://github.com/learnboost/socket.io

+0

私はクライアント側のクッキーを使用することができます - それは安全な解決策ですか?クッキーsessionidを保存するクライアント側では? – Jenan

+3

このチュートリアルは素晴らしいです - http://www.danielbaulig.de/socket-ioexpress/ - 解決済み。 – Jenan

関連する問題