node.js / socket.io,cookie只在本地工作

我试图使用基于cookie的会话,但是它只能在本地机器上工作,而不能在networking上工作。 如果我删除会话相关的东西,它将在networking上工作很好…

你必须原谅缺乏高质量的代码,我刚刚开始使用节点/套接字等等,发现任何明确的指南是艰难的,所以我现在处于n00b领域。 基本上这是迄今为止从各种片段一起砍了大约10%的理解我实际上在做什么…

我在Chrome中看到的错误是:

socket.io.js:1632GET http://192.168.0.6:8080/socket.io/1/?t=1334431940273 500(内部服务器错误)

Socket.handshake ——- socket.io.js:1632

Socket.connect ——- socket.io.js:1671

套接字——- socket.io.js:1530

io.connect ——- socket.io.js:91

(匿名函数)——- / socket-test /:9

jQuery.extend.ready ——- jquery.js:438

并在服务器的控制台中,我看到:

debugging – 提供静态内容/socket.io.js

debugging – 授权

警告 – 握手错误没有cookie

我的服务器是:

var express = require('express') , app = express.createServer() , io = require('socket.io').listen(app) , connect = require('express/node_modules/connect') , parseCookie = connect.utils.parseCookie , RedisStore = require('connect-redis')(express) , sessionStore = new RedisStore(); app.listen(8080, '192.168.0.6'); app.configure(function() { app.use(express.cookieParser()); app.use(express.session( { secret: 'YOURSOOPERSEKRITKEY', store: sessionStore })); }); io.configure(function() { io.set('authorization', function(data, callback) { if(data.headers.cookie) { var cookie = parseCookie(data.headers.cookie); sessionStore.get(cookie['connect.sid'], function(err, session) { if(err || !session) { callback('Error', false); } else { data.session = session; callback(null, true); } }); } else { callback('No cookie', false); } }); }); var users_count = 0; io.sockets.on('connection', function (socket) { console.log('New Connection'); var session = socket.handshake.session; ++users_count; io.sockets.emit('users_count', users_count); socket.on('something', function(data) { io.sockets.emit('doing_something', data['data']); }); socket.on('disconnect', function() { --users_count; io.sockets.emit('users_count', users_count); }); }); 

我的页面JS是:

 jQuery(function($){ var socket = io.connect('http://192.168.0.6', { port: 8080 } ); socket.on('users_count', function(data) { $('#client_count').text(data); }); socket.on('doing_something', function(data) { if(data == '') { window.setTimeout(function() { $('#target').text(data); }, 3000); } else { $('#target').text(data); } }); $('#textbox').keydown(function() { socket.emit('something', { data: 'typing' }); }); $('#textbox').keyup(function() { socket.emit('something', { data: '' }); }); }); 

检查你的系统时钟,如果服务器和客户端有不同的时钟,那么在你设置cookie之后,cookie可能会马上过期。