2013-04-17 94 views
2

現在,在使用nodejs和socket.io幾個小時後,我遇到了更多的問題 - 其中一個問題是,我需要在node.js中獲取sessionID,使用app.get('/' ...因爲該事件似乎沒有火的時候,socket.io相連,它只激發.on('connection', function(...在nodeJS中獲取SESSIONID

var express = require('express')() 
express.set('port', process.env.PORT || 8080) 

var server = require('http').createServer(express) 
var socket = require('socket.io').listen(server) 

server.listen(express.get('port')) 

// this event is fired, get('/', ... isnt! 
server.on('connection', function(stream) { 
    // ?? 
}) 

會話最初由PHP應用程序創建,如用戶登錄,會話數據被存儲在數據庫中,關鍵我需要訪問的數據是SESSION ID。最簡單的方法是什麼?就像上面提到的那樣,我發現了一些使用app.get('/' ...的例子,但是我根本無法讓這個事件觸發。

謝謝。

回答

1

如果會話數據被存儲爲cookie(很可能),那麼您應該能夠在套接字握手期間重新解析該數據。我張貼在this answer的代碼,但在這裏複製的代碼,以及:

io.configure(function() { 
    io.set('authorization', function (handshakeData, callback) { 

    var cookie = handshakeData.headers.cookie; 

    // parse the cookie to get user data... 

    // second argument to the callback decides whether to authorize the client 
    callback(null, true); 
    }); 
}); 

如果會話數據在URL中傳播,那麼你可能能夠從handshakeData.urlhandshakeData.query收集這些信息。你可能不得不做你自己的實驗。

+0

嗯,我得到的頭信息(餅乾爲空) - 但我似乎沒有得到'Set-Cookie'數據,它顯然只是不存在。如果我用螢火蟲檢查我的Answer-Header,它告訴我類似於'Set-Cookie PHPSESSID = ...; path = /'etc - 但是這些信息似乎在handshakeData中缺失。不應該有相同的標題?也許我只是得到整個SESSION概念錯誤 – Katai

+1

啊!我找到了解決方案。你的想法似乎行得通,基於PHP的問題是基於PHP的(通過改變session.cookie_domain,它現在似乎提供了PHPSESSID)非常感謝! – Katai