我正在使用快速框架。我想从socket.io访问会话数据。我尝试使用client.listener.server.dynamicViewHelpers数据来表达dynamicHelpers,但无法获取会话数据。有没有简单的方法可以做到这一点?请看代码
app.listen(3000); var io = require('socket.io'); var io = io.listen(app); io.on('connection', function(client){ // I want to use session data here client.on('message', function(message){ // or here }); client.on('disconnect', function(){ // or here }); });
这不适用于通过flashsocket传输的套接字(它不会向服务器发送所需的cookie),但可以可靠地用于其他所有事务。我只是在代码中禁用了flashsocket传输。
为了使其工作,在Express / Connect端,我明确定义了会话存储,以便可以在套接字内使用它:
MemoryStore = require('connect/middleware/session/memory'), var session_store = new MemoryStore(); app.configure(function () { app.use(express.session({ store: session_store })); });
然后在我的套接字代码中,包含了connect框架,因此我可以使用其cookie解析来从cookie中检索connect.sid。然后,我在具有该connect.sid的会话存储中查找会话,如下所示:
var connect = require('connect'); io.on('connection', function(socket_client) { var cookie_string = socket_client.request.headers.cookie; var parsed_cookies = connect.utils.parseCookie(cookie_string); var connect_sid = parsed_cookies['connect.sid']; if (connect_sid) { session_store.get(connect_sid, function (error, session) { //HOORAY NOW YOU'VE GOT THE SESSION OBJECT!!!! }); } });
然后,您可以根据需要使用会话。