Javascript node.js/socket.io,cookies仅在本地工作
我尝试使用基于cookie的会话,但是它只能在本地机器上工作,不能在网络上工作。如果我删除与会话相关的内容,它将在网络上运行良好 您必须原谅这里缺少高质量代码,我只是从节点/套接字等开始,要找到任何清晰的指南都很困难,所以我现在在n00b领域。基本上,到目前为止,这是从各种片段中拼凑而成的,大约有10%的人了解我在做什么 我在Chrome中看到的错误是: socket.io.js:1632GET 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 在服务器的控制台中,我看到: 调试-提供静态内容/socket.io.js 调试-授权 警告-握手错误无cookie 我的服务器是:Javascript node.js/socket.io,cookies仅在本地工作,javascript,node.js,redis,express,socket.io,Javascript,Node.js,Redis,Express,Socket.io,我尝试使用基于cookie的会话,但是它只能在本地机器上工作,不能在网络上工作。如果我删除与会话相关的内容,它将在网络上运行良好 您必须原谅这里缺少高质量代码,我只是从节点/套接字等开始,要找到任何清晰的指南都很困难,所以我现在在n00b领域。基本上,到目前为止,这是从各种片段中拼凑而成的,大约有10%的人了解我在做什么 我在Chrome中看到的错误是: socket.io.js:1632GET 500(内部服务器错误) Socket.handshake------Socket.io.js:16
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);
});
});
我的页面是:
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通常与其他内容配合得很好。看起来data.headers.cookie不存在。你能转储请求头看看发生了什么吗?我有同样的问题,但是,只有在使用Chrome时。我的应用程序在Safari中运行良好。你也有同样的情况吗?我不确定解决办法是什么。